# OpcVariableNodeInfo Members

> Reference: Provides properties and methods for the examination of the attributes and references of a node which is classified as Variable.

<dl class="api-definition">
<dt>Type</dt>
<dd><a href="./">OpcVariableNodeInfo</a></dd>
<dt>Namespace</dt>
<dd><a href="../namespaces/opc.uafx.client">Opc.UaFx.Client</a></dd>
<dt>Assembly</dt>
<dd>Opc.UaFx.Advanced.dll</dd>
<dt>Package</dt>
<dd>Opc.UaFx.Advanced v2.59.0</dd>
<dt>Also in</dt>
<dd>Opc.UaFx.Client</dd>
</dl>

Inherits members from [OpcInstanceNodeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcinstancenodeinfo/members), [OpcNodeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcnodeinfo/members).

## Properties

### AccessLevel

Gets the value of the [AccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#accesslevel) attribute of the variable node represented.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcAccessLevel AccessLevel { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property AccessLevel As OpcAccessLevel
```

</div>

**Property value**

[OpcAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcaccesslevel/)

One of the members defined by the [OpcAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcaccesslevel/) enumeration. For more information about the use of the [AccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#accesslevel) attribute see [AccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#accesslevel) and [OpcAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcaccesslevel/).

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [AccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#accesslevel) attribute is requested on-demand and is cached for subsequent calls. This means, that further [AccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#accesslevel) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### ArrayDimensions

Gets the length for each dimension of an array value of the variable node represented.

<div class="api-signature" data-lang="csharp">

```csharp
public uint[] ArrayDimensions { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property ArrayDimensions As UInteger()
```

</div>

**Property value**

[UInt32](https://learn.microsoft.com/dotnet/api/system.uint32)[]

A null reference (Nothing in Visual Basic) in case there the value of the variable node represented is a scalar value; otherwise an [uint](https://learn.microsoft.com/dotnet/api/system.uint32) array there each entry indicates a single dimension while the value of the entry defines the length of that dimension.

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute is requested on-demand and is cached for subsequent calls. This means, that further [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### ArrayLength

Gets the total number of elements in all the dimensions of the array value of the variable node represented.

<div class="api-signature" data-lang="csharp">

```csharp
public long ArrayLength { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property ArrayLength As Long
```

</div>

**Property value**

[Int64](https://learn.microsoft.com/dotnet/api/system.int64)

The total number of elements in all the dimensions of the array value of the variable node represented; zero if there are no elements in the array.

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute is requested on-demand and is cached for subsequent calls. This means, that further [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### ArrayRank

Gets the rank (number of dimensions) of the array value of the variable node represented. For example, a one-dimensional array returns 1, a two-dimensional array returns 2, and so on.

<div class="api-signature" data-lang="csharp">

```csharp
public int ArrayRank { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property ArrayRank As Integer
```

</div>

**Property value**

[Int32](https://learn.microsoft.com/dotnet/api/system.int32)

The rank (number of dimensions) of the array value of the variable node represented.

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute is requested on-demand and is cached for subsequent calls. This means, that further [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### DataType

Gets the [OpcTypeNodeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opctypenodeinfo/) about the data type node of the variable node represented.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcTypeNodeInfo DataType { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property DataType As OpcTypeNodeInfo
```

</div>

**Property value**

[OpcTypeNodeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opctypenodeinfo/)

An instance of the [OpcTypeNodeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opctypenodeinfo/) representing the type definition of the variable node represented. In case there is no known type definition for the data type referenced by the variable node a null reference (Nothing in Visual Basic).

### DataTypeId

Gets the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) about the data type node of the variable node represented.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNodeId DataTypeId { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property DataTypeId As OpcNodeId
```

</div>

**Property value**

[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)

An instance of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) which identifies the type node definition of the variable node represented. In case there is no type definition for the type of value provided by the variable node represented a null reference (Nothing in Visual Basic).

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [DataType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#datatype) attribute is requested on-demand and is cached for subsequent calls. This means, that further [DataType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#datatype) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### IsArray

Gets a value indicating whether the value of the variable represented is an array.

<div class="api-signature" data-lang="csharp">

```csharp
public bool IsArray { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property IsArray As Boolean
```

</div>

**Property value**

[Boolean](https://learn.microsoft.com/dotnet/api/system.boolean)

The value true if the value of the variable represented is an array; otherwise the false.

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [ValueRank](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#valuerank) attribute is requested on-demand and is cached for subsequent calls. This means, that further [ValueRank](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#valuerank) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### IsHistorizing

Gets a value indicating whether the server is actively collecting data for the history of the variable node represented.

<div class="api-signature" data-lang="csharp">

```csharp
public bool IsHistorizing { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property IsHistorizing As Boolean
```

</div>

**Property value**

[Boolean](https://learn.microsoft.com/dotnet/api/system.boolean)

The value true if the server is actively collecting historical data; otherwise the value false.

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [IsHistorizing](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#ishistorizing) attribute is requested on-demand and is cached for subsequent calls. This means, that further [IsHistorizing](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#ishistorizing) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### UserAccessLevel

Gets the value of the [UserAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#useraccesslevel) attribute of the variable node represented.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcAccessLevel UserAccessLevel { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property UserAccessLevel As OpcAccessLevel
```

</div>

**Property value**

[OpcAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcaccesslevel/)

One of the members defined by the [OpcAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcaccesslevel/) enumeration. For more information about the use of the [UserAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#useraccesslevel) attribute see [AccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#accesslevel) and [OpcAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcaccesslevel/).

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [UserAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#useraccesslevel) attribute is requested on-demand and is cached for subsequent calls. This means, that further [UserAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#useraccesslevel) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### UserWriteAccess

Gets a mask that indicates which attributes are writable by the current user of the client of a node taking user access rights into account.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcAttributeWriteAccess UserWriteAccess { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property UserWriteAccess As OpcAttributeWriteAccess
```

</div>

**Property value**

[OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/)

A logical combination of the members defined by the [OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/) enumeration indicating which [OpcAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/)s of the variable node represented are currently writable by the current user of the client.

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#userwriteaccess) attribute is requested on-demand and is cached for subsequent calls. This means, that further [UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#userwriteaccess) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### WriteAccess

Gets a mask that indicates which attributes are generally writable through the server not taking user access rights into account.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcAttributeWriteAccess WriteAccess { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property WriteAccess As OpcAttributeWriteAccess
```

</div>

**Property value**

[OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/)

A logical combination of the members defined by the [OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/) enumeration indicating which [OpcAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/)s of the variable node represented are generally writable by the server.

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#writeaccess) attribute is requested on-demand and is cached for subsequent calls. This means, that further [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#writeaccess) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

## Methods

### GetArrayLength

Gets a 32-bit integer that represents the number of elements in the specified dimension of the array value of the variable node.

<div class="api-signature" data-lang="csharp">

```csharp
public long GetArrayLength(int dimension)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function GetArrayLength(dimension As Integer) As Long
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `dimension` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | A zero-based dimension of the array value whose length needs to be determined. |

**Returns**

[Int64](https://learn.microsoft.com/dotnet/api/system.int64)

A 32-bit integer that represents the number of elements in the specified dimension of the array value.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `dimension` is less than zero or equals to or greater than [ArrayRank](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcvariablenodeinfo/members#arrayrank). |
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The value of the variable node represented is not an array (see [IsArray](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcvariablenodeinfo/members#isarray)). |

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute is requested on-demand and is cached for subsequent calls. This means, that further [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.

### GetArrayLowerBound

Gets the index of the first element of the specified dimension in the array value of the variable node.

<div class="api-signature" data-lang="csharp">

```csharp
public long GetArrayLowerBound(int dimension)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function GetArrayLowerBound(dimension As Integer) As Long
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `dimension` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | A zero-based dimension of the array value whose starting index needs to be determined. |

**Returns**

[Int64](https://learn.microsoft.com/dotnet/api/system.int64)

The index of the first element of the specified dimension in the array value.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `dimension` is less than zero or equals to or greater than [ArrayRank](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcvariablenodeinfo/members#arrayrank). |
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The value of the variable node represented is not an array (see [IsArray](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcvariablenodeinfo/members#isarray)). |

### GetArrayUpperBound

Gets the index of the last element of the specified dimension in the array value of the variable node.

<div class="api-signature" data-lang="csharp">

```csharp
public long GetArrayUpperBound(int dimension)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function GetArrayUpperBound(dimension As Integer) As Long
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `dimension` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | A zero-based dimension of the array value whose upper bound needs to be determined. |

**Returns**

[Int64](https://learn.microsoft.com/dotnet/api/system.int64)

The index of the last element of the specified dimension in the array value, or -1 if the specified dimension is empty.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `dimension` is less than zero or equals to or greater than [ArrayRank](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcvariablenodeinfo/members#arrayrank). |
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The value of the variable node represented is not an array (see [IsArray](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcvariablenodeinfo/members#isarray)). |

**Remarks**

The time consumed by the first call of the property depends on the availability of the server, because of the [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute is requested on-demand and is cached for subsequent calls. This means, that further [ArrayDimensions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#arraydimensions) attribute requests will take use of already retrieved attribute information and will not demand additional network resources.
