跳到主要内容

Variant

Variant 是 OPC UA 的通用值容器, 覆盖 OPC UA 全部内置数据类型. SDK 用它在 C# 与 native 之间传值.

配套

公共属性​

类别属性类型访问说明
状态IsNullboolR是否空
IsArrayboolR是否数组
类型DataTypeBuiltinTypeR内置类型
ArrayLengthintR数组长度 (0 = 标量)

构造 (标量)​

new Variant(true)             // Boolean
new Variant((sbyte)-1) // SByte
new Variant((byte)255) // Byte
new Variant((short)42) // Int16
new Variant((ushort)42) // UInt16
new Variant(42) // Int32
new Variant(42u) // UInt32
new Variant(42L) // Int64
new Variant(42uL) // UInt64
new Variant(3.14f) // Float
new Variant(3.14) // Double
new Variant("hello") // String
new Variant(DateTime.UtcNow) // DateTime
new Variant(Guid.NewGuid()) // Guid
new Variant(new byte[]{...}) // ByteString

构造 (数组)​

new Variant(new[] { 1.0, 2.0, 3.0 })            // Double[]
new Variant(new[] { "a", "b", "c" }) // String[]
new Variant(new[] { true, false, true }) // Boolean[]

读取 (强类型)​

v.AsBoolean
v.AsSByte / v.AsByte
v.AsInt16 / v.AsUInt16
v.AsInt32 / v.AsUInt32
v.AsInt64 / v.AsUInt64
v.AsFloat / v.AsDouble
v.AsString
v.AsDateTime
v.AsGuid
v.AsByteString // byte[]

// 数组
v.AsDoubleArray
v.AsStringArray
// ...

类型不匹配抛 InvalidCastException.

ToString​

Variant.ToString() 按 DataType 智能格式化:

DataType输出示例
Double3.14
String"hello"
DateTime2026-04-25T12:00:00Z
ByteStringBytes(N=4)
Array[1, 2, 3, ...]

内存所有权​

Variant 包装 native handle. 从 ua.Read / ua.Call 等返回的 Variant 持有 owns=true, 必须 Dispose. 自己 new Variant(...) 构造的也持有, Dispose.

using var v = new Variant(42);
ua.Write("ns=2;s=X", v);

或简写 (Write 会内部 dispose):

ua.Write("ns=2;s=X", new Variant(42));  // SDK 内部已确保释放

BuiltinType 完整清单​

Null, Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64,
Float, Double, String, DateTime, Guid, ByteString, XmlElement,
NodeId, ExpandedNodeId, StatusCode, QualifiedName, LocalizedText,
ExtensionObject, DataValue, Variant, DiagnosticInfo

数字 0..25, 见 SDK 源码 Enums.cs.

ExtensionObject (复杂结构)​

OPC UA Server 自定义 Struct DataType 通过 ExtensionObject 包装. 当前 SDK 提供基础 ExtensionObject 容器, 完整 schema 解析在后续版本.

下一步​