2012-04-20 65 views
3

我有一個適用於大多數自定義類型的泛型方法。今天我正在建立單元測試。該擴展失敗,類型爲string。字符串出現兩個公共實例屬性,LengthChars。當我打電話給GetValue時,它彈出「參數計數不匹配」。反射字符串時引發的參數計數不匹配

我沒有任何需要允許字符串。我可以爲我的通用添加一個足以解決問題的約束嗎?

代碼片斷

public static DataTable ToDataTable<T>(this List<T> items){... 

    //List<T> generally works...just found it failing out with string 
    List<string> items = new List<string> { "cookie", "apple", "whatever" }; 
    System.Reflection.PropertyInfo[] props = typeof(string).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); 

    foreach (var item in items) 
    { 
     var values = new object[props.Length]; 
     for (var i = 0; i < props.Length; i++) 
     { 
      values[i] = props[i].GetValue(item, null); 
     } 
    } 
+1

http://stackoverflow.com/questions/3747572/how-do-i-deal-with-arrays-using-reflection – 2012-04-20 20:29:53

+0

@ChrisShain - 我不關注。他們在談論數組。根據MSDN列表不是一個數組。我應該從那個鏈接中得到什麼? – 2012-04-20 20:37:30

+1

Chars屬性是索引器,不能將null作爲第二個參數傳遞。我非常懷疑你想看到這個屬性。 – 2012-04-20 20:43:22

回答

9

Chars索引在C#中的術語 - 但在.NET/CLR術語中,「產權與指標參數」 ......這樣你就可以只得到由值指定參數。所以在這種情況下,它的代表在這裏使用索引:

char c = text[3]; 

Dictionary<TKey, TValue>索引將是你會得到dictionary[key]的方式。

如果您只想要「正常」屬性,請按照PropertyInfo.GetIndexParameters()返回空數組的那些屬性篩選屬性列表。

+0

好的,你幫了我太多。我必須購買你的書。在我做之前只有一個問題,你會在未來30天內發佈一個新版本嗎? – 2012-04-20 21:21:05

+0

@ P.Brian.Mackey:沒有 - 很長一段時間沒有計劃做新版本。我將爲C#5編寫一個(免費)額外章節。我還有兩本書,我想在未來一兩年開始寫作。 – 2012-04-20 21:25:14