现在我有一个名为IMessageConfiguration<T>
的接口,它实现了一个名为Label
(类型为byte
)的属性。我有地图上的标签,以它们的相对配置消息中的结构如下:从动态词典中包含的元素获取属性的更快方法?
Dictionary<byte, dynamic> configurationMap = new Dictionary<byte, dynamic>();
现在,虽然字典是动态我只用任一IMessageConfiguration<double>
IMessageConfiguration<uint>
或填充它。无论每个字典条目的类型如何,该条目将具有属性Label
,因为所有条目最终都将具有IMessageConfiguration<T>
基本类型。 但我知道编译器对此不了解。
我正在编写一个例程来查看字典并获得IMessageConfiguration<T>
条目中的每个条目的Label
属性。这是我在做这个当前的尝试:
public IList<byte> GetLabels()
{
IList<byte> labels = new List<byte>();
// obtain all of the labels
foreach (var configuration in this.configurationMap)
{
if (configuration.Value is IMessageConfiguration<double>)
{
labels.Add((configuration.Value as IMessageConfiguration<double>).Label);
}
else if (configuration.Value is IMessageConfiguration<uint>)
{
labels.Add((configuration.Value as IMessageConfiguration<uint>).Label);
}
}
return labels;
}
有没有办法更清洁获得每个邮件配置的所有Label
性质的?
正如评论中所述,这里是IMessageConfiguration<T>
接口的完整定义。
public interface IMessageConfiguration<T>
{
string Description { get; }
byte Label { get; }
ushort LSB { get; }
ushort MSB { get; }
double Resolution { get; }
int SignBit { get; }
string Title { get; }
string Units { get; }
uint Encode(T data);
T Decode(uint message);
}
提供'IMessageConfiguration'接口的完整定义可能有助于回答。 –
Evk
@Evk我想我可以做到这一点,但它实际上只是一个容器类型的类,有一堆虚拟数据属性。 – Snoopy
我的观点是,如果'Label'属性与'T'类型无关(例如如果'Label'总是'string') - 您可以将其移动到父接口“IMessageConfiguration”,然后使用'Dictionary
Evk