c#Dictionary with Func <string,t =“”> als values </string,>

时间:2014-08-29 09:02:51

标签: c# generics dictionary

我想把Func放在T是通用类型的地方,作为字典中的值。所以基本上我想做点什么:

 Dictionary<string, Func<MyObject, T>> _sortMappings = 
                new Dictionary<string, Func<MyObject, T>>()
    {
        { "Name", (b) => b.Name }, // name is a string            
        { "Length", (b) => b.Length }, // length is an int
        { "Date", (b) => b.Date } // a datetime object
    };

这有意义吗?这可能吗?

2 个答案:

答案 0 :(得分:5)

Func<MyObject, T>您无法使用Func<MyObject, object>。 T不能同时超过一种类型。因此,您需要找到stringintDateTime object的常见类型。

答案 1 :(得分:0)

使用Convert.ChangeType Method

尝试这种方式

"Name", b => (T)System.Convert.ChangeType(b.Name,typeof(T))

你的功能应该是

private static T InvokeFunction<T>(Func<T> func)
    {
       Dictionary<string, Func<MyObject, T>> sortMappings =
       new Dictionary<string, Func<MyObject, T>>();
       sortMappings.Add("Name", b => (T)System.Convert.ChangeType(b.Name,typeof(T)));
       sortMappings.Add("Length", b => (T)System.Convert.ChangeType(b.Length, typeof(T)));
       sortMappings.Add("Date", b => (T)System.Convert.ChangeType(b.Date, typeof(T)));
       return func.Invoke();
    }