我無法遍歷傳遞給函數的字典作爲泛型。例如,我有一個從數據庫加載數據的函數。C#迭代作爲通用字典傳遞的字典
public T Load<T>(...)
這個函數可以這樣調用,我沒有問題;
someclasstype data = Load<someclasstype>(...);
List<someclasstype> data = Load<List<someclasstype>>(...);
我最近試圖擴大這是能夠處理詞典的歡迎,並調用它像這樣:
Dictionary<long, someclasstype> data = Load<Dictionary<long, someclasstype>>(...)
我可以加載數據沒有問題,並將其存儲在字典沒問題。
在這個階段,字典,其所有keyvaluepairs被存儲在一個名爲結果變量,我創建一個IEnumerable與
IEnumerator resultIdx = ((IEnumerable)result).GetEnumerator();
if (!resultIdx.MoveNext())
return (T)result;
object kvp = resultIdx.Current;
到目前爲止好。我可以在手錶中查看該鍵的值和值的值,或者通過鼠標懸停在kvp變量上。
但我無法弄清楚如何從kvp中獲取keyvaluepair的值部分。
// None of these work - I get compile time errors, unboxing errors, or invalid cast errors.
object item = ((KeyValuePair<TKey, TValue>)kvp).Value;
object item = ((KeyValuePair<long, object>)kvp).Value;
object item = ((T)kvp).Value // Never had a hope for this, but desperation...
有沒有人有任何想法我可以做到這一點?
使用反射? 'object key kvp.GetType()。GetProperty(「Key」)。GetValue(kvp); ()「)。GetValue(kvp);' 不是非常優化,但可以工作... – Dede
真棒,謝謝德德...完美的作品。這個功能已經大量使用反射,所以我不擔心(即速度)。 –
帶有枚舉器的部分是函數「Load」的這一部分,還是在「Load 」之外?因爲如果它在外面,爲什麼不使用'Dictionary '提供的'GetEnumerator'方法? –
ckruczek