从动力学字典中包含的元素中获取属性的更快方法?

史努比

现在,我有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);
}
EVK

我说你应该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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章