带有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<MyObject, T>
不可能需要使用Func<MyObject, object>
。T不能同时是多个类型。因此,您需要为string
、int
和DateTime
找到一个通用类型,即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();
}