带有Func<;字符串,T>;als值

本文关键字:gt als 字符串 Func lt 带有 | 更新日期: 2023-09-27 18:20:01

我想把T是泛型类型的Func作为字典中的值。所以基本上我想做一些类似的事情:

 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
    };

这有意义吗?这可能吗?

带有Func<;字符串,T>;als值

使用Func<MyObject, T>不可能需要使用Func<MyObject, object>。T不能同时是多个类型。因此,您需要为stringintDateTime找到一个通用类型,即object

使用Convert.ChangeType方法以这种方式尝试

"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();
    }