跳到主要内容

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 解析在后续版本.

下一步