3

我有一个适用于我的大多数自定义类型的通用方法。今天我正在构建单元测试。扩展失败,类型为string。string 提供了两个公共实例属性,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 回答