# OpcDataTypeInfo Members

> Reference: Represents type declarations used for data types.

<dl class="api-definition">
<dt>Type</dt>
<dd><a href="./">OpcDataTypeInfo</a></dd>
<dt>Namespace</dt>
<dd><a href="../namespaces/opc.uafx">Opc.UaFx</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>

## Properties

### BaseType

<span class="api-meta">virtual</span>

Gets the type from which the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) directly inherits.

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

```csharp
public virtual OpcDataTypeInfo BaseType { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property BaseType As OpcDataTypeInfo
```

</div>

**Property value**

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

An instance of the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) which represents the type from which the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) directly inherits or a null reference (Nothing in Visual Basic) if the type does not inherit from a different [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

### ByteOrder

<span class="api-meta">virtual</span>

Gets the byte order of the data represented by the type.

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

```csharp
public virtual OpcByteOrder? ByteOrder { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property ByteOrder As OpcByteOrder?
```

</div>

**Property value**

[Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[OpcByteOrder](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcbyteorder/)&gt;

One of the members defined by the [OpcByteOrder](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcbyteorder/) enumeration which overrides the [ByteOrder](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/members#byteorder) of its [TypeDictionary](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#typedictionary) or a null reference (Nothing in Visual Basic) if the [OpcByteOrder](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcbyteorder/) is to be used from the [TypeDictionary](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#typedictionary) of this type.

### Category

Gets the category the [IOpcType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopctype/) falls within.

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

```csharp
public OpcTypeCategory Category { get; }
```

</div>

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

```vbnet
Public ReadOnly Property Category As OpcTypeCategory
```

</div>

**Property value**

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

One of the members defined by the [OpcTypeCategory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctypecategory/) enumeration.

**Implements**

[Category](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopctype/members#category)

**Remarks**

This implementation always returns [DataType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctypecategory/#datatype).

### CustomAttributes

<span class="api-meta">virtual</span>

Gets an array of custom attributes associated with this type.

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

```csharp
public virtual string[] CustomAttributes { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property CustomAttributes As String()
```

</div>

**Property value**

[String](https://learn.microsoft.com/dotnet/api/system.string)[]

An array of [string](https://learn.microsoft.com/dotnet/api/system.string) values used by the author of this type.

**Remarks**

Applications are not be required to understand these attributes in order to interpret an encoded instance of the type.

### Declarations

<span class="api-meta">virtual · since v2.26</span>

Gets a value indicating the ways used to declare the data type represented.

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

```csharp
public virtual OpcDataTypeDeclarations Declarations { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property Declarations As OpcDataTypeDeclarations
```

</div>

**Property value**

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

One or a combination of the members defined by the [OpcDataTypeDeclarations](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedeclarations/) enumeration.

### Documentation

<span class="api-meta">virtual · since v2.9</span>

Gets any semantic information that would help a human to understand what the type represents.

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

```csharp
public virtual string Documentation { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property Documentation As String
```

</div>

**Property value**

[String](https://learn.microsoft.com/dotnet/api/system.string)

A human readable text that describes the type and that would help a human to understand what the type represents.

### Empty

<span class="api-meta">static</span>

Gets the type to use if their is no specific type data available.

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

```csharp
public static OpcDataTypeInfo Empty { get; }
```

</div>

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

```vbnet
Public Shared ReadOnly Property Empty As OpcDataTypeInfo
```

</div>

**Property value**

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

An instance of the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) class which refers to the [Empty](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/members#empty).

### Encoding

Gets the information used to identify the type of encoding used for the data of the type represented.

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

```csharp
public OpcEncoding Encoding { get; }
```

</div>

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

```vbnet
Public ReadOnly Property Encoding As OpcEncoding
```

</div>

**Property value**

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

An instance of the [OpcEncoding](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcencoding/) class which represents the information used to encode data of the type or a null reference (Nothing in Visual Basic) if is no encoding information associated with the type.

**Implements**

[Encoding](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#encoding)

### EncodingMask

<span class="api-meta">virtual</span>

Gets the characteristics used to encode the existence of optional fields.

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

```csharp
public virtual OpcEncodingMask EncodingMask { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property EncodingMask As OpcEncodingMask
```

</div>

**Property value**

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

An instance of the [OpcEncodingMask](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcencodingmask/) class.

**Implements**

[EncodingMask](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#encodingmask)

### Encodings

<span class="api-meta">virtual</span>

Gets information of all encodings supported by the type represented.

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

```csharp
public virtual OpcEncoding[] Encodings { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property Encodings As OpcEncoding()
```

</div>

**Property value**

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

An array of [OpcEncoding](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcencoding/) instances supported by the type.

**Implements**

[Encodings](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#encodings)

### IsArray

<span class="api-meta">virtual</span>

Gets a value indicating whether the type is an array.

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

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

</div>

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

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

</div>

**Property value**

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

The value true if the current type is an array; otherwise the value false.

**Implements**

[IsArray](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#isarray)

### IsEmpty

<span class="api-meta">virtual</span>

Gets a value indicating whether the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) represents a type to use if there is no specific type described.

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

```csharp
public virtual bool IsEmpty { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property IsEmpty As Boolean
```

</div>

**Property value**

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

The value true if the type does not declare a specific type; otherwise the value false.

### IsEnum

<span class="api-meta">virtual</span>

Gets a value indicating whether the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) represents an enumeration.

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

```csharp
public virtual bool IsEnum { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property IsEnum As Boolean
```

</div>

**Property value**

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

The value true if the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) represents an enumeration; otherwise the value false.

**Implements**

[IsEnum](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#isenum)

**Remarks**

The OPC UA handles enumerations as a numeric value that has a fixed set of valid values. The encoded value described by an enumeration is always an unsigned integer (see [uint](https://learn.microsoft.com/dotnet/api/system.uint32)) with a fixed size.

### IsOpaque

<span class="api-meta">virtual</span>

Gets a value indicating whether the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) describes a primitive fixed size type.

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

```csharp
public virtual bool IsOpaque { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property IsOpaque As Boolean
```

</div>

**Property value**

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

The value true if the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) represents an opaque type; otherwise the value false.

**Implements**

[IsOpaque](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#isopaque)

### IsPrimitive

<span class="api-meta">virtual</span>

Gets a value indicating whether the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) is one of the primitive types.

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

```csharp
public virtual bool IsPrimitive { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property IsPrimitive As Boolean
```

</div>

**Property value**

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

The value true if the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) is one of the primitive types; otherwise the value false.

**Implements**

[IsPrimitive](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#isprimitive)

### IsStruct

<span class="api-meta">virtual</span>

Gets a value indicating whether the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) is a structured type; that is not a value type.

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

```csharp
public virtual bool IsStruct { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property IsStruct As Boolean
```

</div>

**Property value**

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

The value true if the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) is a structured type; otherwise the value false.

**Implements**

[IsStruct](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#isstruct)

**Remarks**

The OPC UA handles structures as a sequence of values. Each value in the sequence is called a field. A field may specify that zero, one or multiple instances of the type appear within the sequence described by the structure. Some fields have lengths that are not multiples of 8 bits. Several of these fields may appear in a sequence in a structure, however, the total number of bits used in the sequence shall be aligned on a byte boundary. A sequence of fields which do not line up on byte boundaries are specified from the least significant bit to the most significant bit. Sequences which are longer than one byte overflow from the most significant bit to the first byte into the least significant bit of the next byte.

### IsSystemType

<span class="api-meta">virtual</span>

Gets a value indicating whether the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) represents one of the predefined built-in data types defined by the OPC UA.

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

```csharp
public virtual bool IsSystemType { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property IsSystemType As Boolean
```

</div>

**Property value**

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

The value true if the current data type represents a OPC UA is a built-in type; otherwise the value false.

**Implements**

[IsSystemType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#issystemtype)

### IsUnion

<span class="api-meta">virtual · since v2.32</span>

Gets a value indicating whether the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) represents a type which is only transported using a field indicator and the field indicated.

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

```csharp
public virtual bool IsUnion { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property IsUnion As Boolean
```

</div>

**Property value**

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

The value true if the current data type represents an union type; otherwise the value false.

**Implements**

[IsUnion](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#isunion)

### IsUnknown

<span class="api-meta">virtual</span>

Gets a value indicating whether the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) acts as a placeholder for a referenced type its type declaration could not resolved.

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

```csharp
public virtual bool IsUnknown { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property IsUnknown As Boolean
```

</div>

**Property value**

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

The value true if the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) acts as a placeholder for an unresolved type declaration; otherwise the value false.

**Implements**

[IsUnknown](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopctype/members#isunknown)

### Name

Gets a value which defines the non-localizable human-readable name of the type represented. A node which represents this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) uses the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#name) as its [BrowseName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#browsename).

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

```csharp
public OpcName Name { get; }
```

</div>

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

```vbnet
Public ReadOnly Property Name As OpcName
```

</div>

**Property value**

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

An instance of the [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/) class with the [string](https://learn.microsoft.com/dotnet/api/system.string) used as the name of the type which does not unambiguously identify the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

**Implements**

[Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopctype/members#name), [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#name)

### Size

<span class="api-meta">virtual</span>

Gets the size of the type represented as the number of bytes required.

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

```csharp
public virtual long? Size { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property Size As Long?
```

</div>

**Property value**

[Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[Int64](https://learn.microsoft.com/dotnet/api/system.int64)&gt;

The size of the type as the number of bytes required; if this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) represents a type with a fixed size (see [IsOpaque](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#isopaque)).

**Implements**

[Size](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#size)

### SizeInBits

<span class="api-meta">virtual</span>

Gets the size of the type represented as the number of bits required.

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

```csharp
public virtual long? SizeInBits { get; }
```

</div>

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

```vbnet
Public Overridable ReadOnly Property SizeInBits As Long?
```

</div>

**Property value**

[Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[Int64](https://learn.microsoft.com/dotnet/api/system.int64)&gt;

The size of the type as the number of bits required; if this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) represents a type with a fixed size (see [IsOpaque](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#isopaque)).

**Implements**

[SizeInBits](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#sizeinbits)

### TypeDictionary

Gets the the [OpcDataTypeDictionary](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/) which conains the data type declaration represented.

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

```csharp
public OpcDataTypeDictionary TypeDictionary { get; }
```

</div>

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

```vbnet
Public ReadOnly Property TypeDictionary As OpcDataTypeDictionary
```

</div>

**Property value**

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

An instance of the [OpcDataTypeDictionary](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/) class which defines the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

### TypeId

Gets a value which identifies the type represented. A node which represents this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) uses the [TypeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#typeid) as its [NodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#nodeid).

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

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

</div>

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

```vbnet
Public ReadOnly Property TypeId 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/) class used as the identifier of the type which unambiguously identifies the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

**Implements**

[TypeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopctype/members#typeid), [TypeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#typeid)

### UnderlyingType

Gets the type which provides the implementation of the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

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

```csharp
public Type UnderlyingType { get; }
```

</div>

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

```vbnet
Public ReadOnly Property UnderlyingType As Type
```

</div>

**Property value**

[Type](https://learn.microsoft.com/dotnet/api/system.type)

The [Type](https://learn.microsoft.com/dotnet/api/system.type) which implements the type declared or a null reference (Nothing in Visual Basic) if there does not exist a declaration of the type described by this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

**Implements**

[UnderlyingType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopctype/members#underlyingtype), [UnderlyingType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#underlyingtype)

### XmlName

Gets the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#name) of this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) qualified with the [XmlNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/members#xmlnamespace) of the [TypeDictionary](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#typedictionary) which conains the data type declaration represented.

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

```csharp
public XmlQualifiedName XmlName { get; protected set; }
```

</div>

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

```vbnet
Public Property XmlName As XmlQualifiedName
```

</div>

**Property value**

[XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname)

An instance of the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) class which identifies this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) using a full qualified name which includes the [XmlNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/members#xmlnamespace) and [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#name) of this type using the [Value](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/members#value) of the [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/) used.

**Remarks**

The [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) is used in OPC UA to refer to existing types when for example declaring fields.

## Methods

### GetArrayRank

<span class="api-meta">virtual</span>

Gets the number of dimensions in an array.

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

```csharp
public virtual int GetArrayRank()
```

</div>

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

```vbnet
Public Overridable Function GetArrayRank() As Integer
```

</div>

**Returns**

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

An integer that contains the number of dimensions in the current type.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The current type is not an array. |

**Implements**

[GetArrayRank](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypeinfo/members#getarrayrank)

### GetElementType

<span class="api-meta">virtual</span>

Returns the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) of the object encompassed or referred to by the current array.

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

```csharp
public virtual OpcDataTypeInfo GetElementType()
```

</div>

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

```vbnet
Public Overridable Function GetElementType() As OpcDataTypeInfo
```

</div>

**Returns**

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

The [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) of the object encompassed or referred to by the current array or null if the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) is not an array.

### GetField

Searches for the field with the specified `name`.

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

```csharp
public OpcDataFieldInfo GetField(string name)
```

</div>

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

```vbnet
Public Function GetField(name As String) As OpcDataFieldInfo
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `name` | [String](https://learn.microsoft.com/dotnet/api/system.string) | The [string](https://learn.microsoft.com/dotnet/api/system.string) containing the name of the data field to get. |

**Returns**

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

An instance of the [OpcDataFieldInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatafieldinfo/) representing the field with the specified name, if found; otherwise a null reference (Nothing in Visual Basic).

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `name` is a null reference (Nothing in Visual Basic). |

**Remarks**

The `name` specified is compared using [Ordinal](https://learn.microsoft.com/dotnet/api/system.stringcomparison#system-stringcomparison-ordinal).

### GetFields

Returns all the fields of the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

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

```csharp
public OpcDataFieldInfo[] GetFields()
```

</div>

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

```vbnet
Public Function GetFields() As OpcDataFieldInfo()
```

</div>

**Returns**

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

An array of [OpcDataFieldInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatafieldinfo/) objects representing all the fields defined for the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) or an empty array of type [OpcDataFieldInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatafieldinfo/) if no fields are defined for the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

### GetFieldsCore

<span class="api-meta">protected · virtual</span>

When overriden in a derived class, searches for the fields defined for the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

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

```csharp
protected virtual IEnumerable<OpcDataFieldInfo> GetFieldsCore()
```

</div>

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

```vbnet
Protected Overridable Function GetFieldsCore() As IEnumerable(Of OpcDataFieldInfo)
```

</div>

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcDataFieldInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatafieldinfo/)&gt;

A sequence of [OpcDataFieldInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatafieldinfo/) objects representing all fields defined for the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

### GetUnderlyingType

<span class="api-meta">protected · virtual</span>

Retrieves the [Type](https://learn.microsoft.com/dotnet/api/system.type) which provides the implementation of the [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

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

```csharp
protected virtual Type GetUnderlyingType()
```

</div>

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

```vbnet
Protected Overridable Function GetUnderlyingType() As Type
```

</div>

**Returns**

[Type](https://learn.microsoft.com/dotnet/api/system.type)

The [Type](https://learn.microsoft.com/dotnet/api/system.type) which implements the type declared or a null reference (Nothing in Visual Basic) if there does not exist a declaration of the type described by this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

**Remarks**

To determine the underlying [Type](https://learn.microsoft.com/dotnet/api/system.type) this method queries the [Type](https://learn.microsoft.com/dotnet/api/system.type) using the [TypeResolve](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdata/members#typeresolve) event. If there is no [Type](https://learn.microsoft.com/dotnet/api/system.type) information provided the method queries the types defined by the foundation stack using the [TypeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#typeid) and [Encoding](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#encoding) of this [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/). If there is still no [Type](https://learn.microsoft.com/dotnet/api/system.type) determined the method tries to resolve the [Type](https://learn.microsoft.com/dotnet/api/system.type) using the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#name) to construct type names of types defined in the 'Opc.Ua' and 'System' namespace.

### GetXmlName

<span class="api-meta">static · 3 overloads</span>

| Overload | Description |
|---|---|
| [GetXmlName(string, string)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#getxmlname-system-string-system-string)<span class="api-meta">static</span> | Retrieves the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) for the `name` and `xmlNamespace` specified. |
| [GetXmlName(string, OpcNamespace)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#getxmlname-system-string-opc-uafx-opcnamespace)<span class="api-meta">static</span> | Retrieves the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) for the `name` and `namespace` specified. |
| [GetXmlName(string, OpcDataTypeDictionary)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#getxmlname-system-string-opc-uafx-opcdatatypedictionary)<span class="api-meta">static</span> | Retrieves the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) for the `name` and `typeDictionary` specified. |

#### GetXmlName(string, string)

<span class="api-meta">static</span>

Retrieves the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) for the `name` and `xmlNamespace` specified.

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

```csharp
public static XmlQualifiedName GetXmlName(string name, string xmlNamespace)
```

</div>

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

```vbnet
Public Shared Function GetXmlName(
    name As String,
    xmlNamespace As String) As XmlQualifiedName
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `name` | [String](https://learn.microsoft.com/dotnet/api/system.string) | The name of the entity for which the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) is to be created. The value is used for the [Name](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.name). |
| `xmlNamespace` | [String](https://learn.microsoft.com/dotnet/api/system.string) | The namespace within the entity has been declared and which is to be referenced by the [Namespace](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.namespace) to retrieve. This value can be a null reference (Nothing in Visual Basic) or equals to [Empty](https://learn.microsoft.com/dotnet/api/system.string.empty). |

**Returns**

[XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname)

A new instance of the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) which uses the `name` for the [Name](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.name) and the `xmlNamespace` (if specified) for the [Namespace](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.namespace).

#### GetXmlName(string, OpcNamespace)

<span class="api-meta">static</span>

Retrieves the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) for the `name` and `namespace` specified.

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

```csharp
public static XmlQualifiedName GetXmlName(string name, OpcNamespace @namespace)
```

</div>

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

```vbnet
Public Shared Function GetXmlName(
    name As String,
    [namespace] As OpcNamespace) As XmlQualifiedName
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `name` | [String](https://learn.microsoft.com/dotnet/api/system.string) | The name of the entity for which the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) is to be created. The value is used for the [Name](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.name). |
| `namespace` | [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) | The [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) its [Uri](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/members#uri) or [Value](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/members#value) is used to define the [Namespace](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.namespace) to retrieve. This can be a null reference (Nothing in Visual Basic) as well. |

**Returns**

[XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname)

A new instance of the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) which uses the `name` for the [Name](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.name) and the `namespace` (if specified) for the [Namespace](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.namespace).

#### GetXmlName(string, OpcDataTypeDictionary)

<span class="api-meta">static</span>

Retrieves the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) for the `name` and `typeDictionary` specified.

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

```csharp
public static XmlQualifiedName GetXmlName(
    string name,
    OpcDataTypeDictionary typeDictionary)
```

</div>

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

```vbnet
Public Shared Function GetXmlName(
    name As String,
    typeDictionary As OpcDataTypeDictionary) As XmlQualifiedName
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `name` | [String](https://learn.microsoft.com/dotnet/api/system.string) | The name of the entity for which the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) is to be created. The value is used for the [Name](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.name). |
| `typeDictionary` | [OpcDataTypeDictionary](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/) | The [OpcDataTypeDictionary](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/) its [XmlNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypedictionary/members#xmlnamespace) is used to define the [Namespace](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.namespace) to retrieve. This can be a null reference (Nothing in Visual Basic) as well. |

**Returns**

[XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname)

A new instance of the [XmlQualifiedName](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname) which uses the `name` for the [Name](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.name) and the `typeDictionary` (if specified) for the [Namespace](https://learn.microsoft.com/dotnet/api/system.xml.xmlqualifiedname.namespace).

### MakeArrayType

<span class="api-meta">2 overloads</span>

| Overload | Description |
|---|---|
| [MakeArrayType()](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#makearraytype-noparams) | Returns a [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) object representing a one-dimensional array of the current type, with a lower bound of zero. |
| [MakeArrayType(int)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#makearraytype-system-int32) | Returns a [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) object representing an array of the current type, with the specified number of dimensions. |

#### MakeArrayType()

Returns a [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) object representing a one-dimensional array of the current type, with a lower bound of zero.

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

```csharp
public OpcDataTypeInfo MakeArrayType()
```

</div>

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

```vbnet
Public Function MakeArrayType() As OpcDataTypeInfo
```

</div>

**Returns**

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

A [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) object representing a one-dimensional array of the current type, with a lower bound of zero.

#### MakeArrayType(int)

Returns a [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/) object representing an array of the current type, with the specified number of dimensions.

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

```csharp
public OpcDataTypeInfo MakeArrayType(int rank)
```

</div>

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

```vbnet
Public Function MakeArrayType(rank As Integer) As OpcDataTypeInfo
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `rank` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The number of dimensions for the array. This number must be less than or equal to 32. |

**Returns**

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

An object representing an array of the current type, with the specified number of dimensions.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `rank` is not between 1 and 32 (inclusive). |

### ToString

<span class="api-meta">override</span>

Returns a [string](https://learn.microsoft.com/dotnet/api/system.string) representing the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#name) or the [UnderlyingType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#underlyingtype) of the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

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

```csharp
public override string ToString()
```

</div>

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

```vbnet
Public Overrides Function ToString() As String
```

</div>

**Returns**

[String](https://learn.microsoft.com/dotnet/api/system.string)

A [string](https://learn.microsoft.com/dotnet/api/system.string) representing the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#name) or the [UnderlyingType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/members#underlyingtype) of the current [OpcDataTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypeinfo/).

**Overrides**

[ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)
