現在我有一個名爲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