现在,我有IMessageConfiguration<T>
一个称为的接口,该接口实现了名为Label
(of type byte
)的属性。我有以下结构的标签映射到它们的相对消息配置:
Dictionary<byte, dynamic> configurationMap = new Dictionary<byte, dynamic>();
现在,尽管字典是动态的,但我只用IMessageConfiguration<double>
或填充它IMessageConfiguration<uint>
。不管每个字典条目具有哪种类型,该条目都将具有属性,Label
因为所有条目最终都将具有IMessageConfiguration<T>
基本类型。但是,我确实理解编译器对此一无所知。
我正在编写一个例程来浏览字典并获取Label
每个IMessageConfiguration<T>
条目的属性。这是我目前的尝试:
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);
}
我说你应该dynamic
尽可能避免。您可以将所有不T
相关的属性放到父接口中:
public interface IMessageConfiguration
{
string Description { get; }
byte Label { get; }
ushort LSB { get; }
ushort MSB { get; }
double Resolution { get; }
int SignBit { get; }
string Title { get; }
string Units { get; }
}
public interface IMessageConfiguration<T> : IMessageConfiguration {
uint Encode(T data);
T Decode(uint message);
}
并Dictionary<byte, IMessageConfiguration>
改为使用。即使您dynamic
出于某些原因坚持使用-也可以yourDict.OfType<IMessageConfiguration>().Select(c => c.Label).ToList()
获取这些标签。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句