3

ほとんどのカスタムタイプで機能するジェネリックメソッドがあります。今日、私はユニットテストを構築しています。拡張機能はタイプで失敗しますstring。stringには、2つのパブリックインスタンスプロパティとがLengthありCharsます。私がそれを呼ぶとき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);
        }
    }
4

1 に答える 1

10

CharsはC#用語ではインデクサーですが、.NET / CLR用語では「インデックスパラメーターを持つプロパティ」です。したがって、引数を指定することによってのみ値を取得できます。したがって、この場合、ここで使用されるインデクサーを表します。

char c = text[3];

インデクサーでは、Dictionary<TKey, TValue>あなたが得る方法になるでしょうdictionary[key]

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

于 2012-04-20T20:37:37.490 に答える