2012-04-20 10 views
3

ほとんどのカスタムタイプで機能する汎用メソッドがあります。今日私はユニットテストを構築しています。拡張子はタイプstringで失敗します。文字列には、2つのパブリックインスタンスプロパティLengthCharsがあります。私がGetValueと呼ぶとき、それは "パラメータ数不一致"を爆発させる。文字列を反映したときにパラメータの数が一致しない不一致

文字列を許可する必要はありません。問題を解決するのに十分なジェネリックに制約を追加できますか?あなたはだけはして値を取得することができるように...しかし、.NET/CLRの用語では「インデックスパラメータを持つプロパティ」 -

コードが

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 –

+0

@ChrisShain - 私は従いません。彼らは配列について話している。 MSDNリストによると配列ではありません。私はそのリンクから何を得るべきですか? –

+1

Charsプロパティがインデクサーであるため、第2引数としてnullを渡すことはできません。私は非常に真剣にあなたがこのプロパティを見たいと思っています。 –

答えて

9

Charsスニペットは、C#の用語ではインデクサです引数を指定する。 Dictionary<TKey, TValue>

char c = text[3]; 

インデクサは、あなたがdictionary[key]を取得したいの方法のようになります。したがって、この場合には、それはここで使用インデクサを表すです。

「通常」のプロパティのみを使用する場合は、PropertyInfo.GetIndexParameters()が空の配列を返すものでプロパティのリストをフィルタします。

+0

あなたは私をあまりにも助けてくれました。私はあなたの本を買わなければならない。私がする前にちょうど1つの質問、あなたは今後30日間で新しい版をリリースするつもりですか? –

+0

@ P.Brian.Mackey:いいえ、長期​​間新しいバージョンを作成する予定はありません。私はC#5のための(無料の)追加の章を書くつもりです。私は私が来年に書き始めたい2つの他の本を持っています... –

関連する問題