调用函数Func<;字符串,T>;
本文关键字:gt 字符串 lt 函数 Func 调用 | 更新日期: 2023-09-27 18:27:37
我有以下函数。我想调用一个字符串并将其转换为int32。如何调用此函数?
静态FuncGetConverter(T示例)
static Func<string, T> GetConverter<T>(T example)
{
return (x) => Convert<T>(x);
}
这是用于转换的代码。我从StackOverflow获得了这段代码,但不知道如何使用。
static T Convert<T>(string val)
{
Type destiny = typeof(T);
// See if we can cast
try
{
return (T)(object)val;
}
catch { }
// See if we can parse
try
{
return (T)destiny.InvokeMember("Parse", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Public, null, null, new object[] { val });
}
catch { }
// See if we can convert
try
{
Type convertType = typeof(Convert);
return (T)convertType.InvokeMember("To" + destiny.Name, System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Public, null, null, new object[] { val });
}
catch { }
// Give up
return default(T);
}
如果必须使用GetConverter方法,则应首先调用它以获取converter函数。
假设GetConverter在名为A:的类下
int value = 0;
var converter = A.GetConverter(value);
然后您可以从GetConverter方法调用转换器,就像调用本地函数一样:
value = converter("123");
我认为您不必向GetConverter函数传递参数。这个实现更好,因为您不使用示例参数:
static Func<string, T> GetConverter<T>()
{
return (x) => Convert<T>(x);
}
所以现在你可以像这样使用它:
var converter = A.GetConverter<int>();
int value = converter("123");
PS:如果您知道目标(int)和源(string)类型,则可以使用int.TryParse方法。或者你可以使用converter函数本身,而不需要另一个函数来包装它,比如:Convert<int>("123")