在下面的代碼,我需要明確提到CountryId
和CountryName
但我想,以避免和試圖建立一個generic method
。轉換一個通用的IEnumerable <T>到了IEnumerable <KeyValuePair>(C#)
public struct KeyValueStruct
{
public int Key { get; set; }
public string Value { get; set; }
}
private static IEnumerable<KeyValueStruct> ConvertPocoToKeyValueList(IEnumerable<CountryPoco> list)
{
var result = new List<KeyValueStruct>();
if (list != null)
{
foreach (var item in list)
{
result.Add(new KeyValueStruct()
{
Key = item.CountryId,
Value = item.CountryName
});
}
}
return result;
}
我從列表中知道第一個屬性總是整數(在本例中是CountryId),第二個屬性是String。
我想使用Generics
來實現,但我不確定這是否是最好的方法,請參閱我的建議代碼(雖然它不工作)。
private static IEnumerable<KeyValueStruct> ConvertPocoToKeyValueList<T>(T list)
{
var result = new List<KeyValueStruct>();
if (list != null)
{
foreach (var item in list)
{
result.Add(new KeyValueStruct()
{
Key = item.CountryId,
Value = item.CountryName
});
}
}
return result;
}
如果您有更好的主意來達到同樣的效果,那麼請提出建議。
什麼是KeyValueStruct?任何你不使用.NET框架中的KeyValuePair的理由?請注意,LINQ使所有這些微不足道的,btw ...'var result = countries.Select(c => new KeyValuePair (c.CountryId,c.CountryName).ToList();'當然,你需要處理輸入爲空,也許......但是你可能會發現,防止這種情況發生會更好。 –
@JonSkeet:我意識到我錯過了KeyValueStruct,並且剛剛添加到問題中。具有自定義結構在性能方面要快得多,所以我決定自己實現,而不是使用.NET的默認KeyValuePair。有沒有辦法避免對'c.CountryId,c.CountryName'進行硬編碼? –
Um ,'KeyValuePair'已經是一個結構體......你認爲你自己的'KeyValueStruct'類型的速度更快嗎?無可否認這是一個可變值類型,這是一個不同的...但不是一個積極的類型 –