private void ReadValue(IConsumerBinding consumerBinding) { object _value = null; switch (consumerBinding.Encoding.BuiltInType) { case BuiltInType.Boolean: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadBoolean(); } else { _value = m_UADecoder.ReadArray(this, ReadBoolean, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.SByte: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadSByte(); } else { _value = m_UADecoder.ReadArray(this, ReadSByte, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.Byte: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadByte(); } else { _value = m_UADecoder.ReadArray(this, ReadByte, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.Int16: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadInt16(); } else { _value = m_UADecoder.ReadArray(this, ReadInt16, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.UInt16: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadUInt16(); } else { _value = m_UADecoder.ReadArray(this, ReadUInt16, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.Int32: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadInt32(); } else { _value = m_UADecoder.ReadArray(this, ReadInt32, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.UInt32: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadUInt32(); } else { _value = m_UADecoder.ReadArray(this, ReadUInt32, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.Int64: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadInt64(); } else { _value = m_UADecoder.ReadArray(this, ReadInt64, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.UInt64: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadUInt64(); } else { _value = m_UADecoder.ReadArray(this, ReadUInt64, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.Float: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadSingle(); } else { _value = m_UADecoder.ReadArray(this, ReadSingle, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.Double: if (consumerBinding.Encoding.ValueRank < 0) { _value = ReadDouble(); } else { _value = m_UADecoder.ReadArray(this, ReadDouble, consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.String: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadString(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadString(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.DateTime: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadDateTime(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDateTime(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.Guid: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadGuid(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadGuid(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.ByteString: if (consumerBinding.Encoding.ValueRank < 0) { m_UADecoder.ReadByteString(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadByteString(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.XmlElement: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadXmlElement(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadXmlElement(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.NodeId: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadNodeId(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadNodeId(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.ExpandedNodeId: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadExpandedNodeId(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadExpandedNodeId(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.StatusCode: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadStatusCode(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadStatusCode(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.QualifiedName: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadQualifiedName(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadQualifiedName(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.LocalizedText: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadLocalizedText(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadLocalizedText(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.ExtensionObject: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadExtensionObject(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadExtensionObject(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.DataValue: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadDataValue(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDataValue(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.Variant: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadVariant(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadVariant(this), consumerBinding.Encoding.ValueRank > 1); } break; case BuiltInType.DiagnosticInfo: if (consumerBinding.Encoding.ValueRank < 0) { _value = m_UADecoder.ReadDiagnosticInfo(this); } else { _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDiagnosticInfo(this), consumerBinding.Encoding.ValueRank > 1); } break; default: throw new ArgumentOutOfRangeException(string.Format("Impossible to convert the type {0}", consumerBinding.Encoding)); } consumerBinding.Assign2Repository(_value); }