我有以下功能。我想调用并将字符串转换为int32。怎么办这个函数?
static Func GetConverter(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);
}
答案 0 :(得分:0)
如果必须使用GetConverter方法,则应首先调用它以获取转换器功能。
假设GetConverter位于名为A:
的类下int value = 0;
var converter = A.GetConverter(value);
然后您可以像Get本地函数一样从GetConverter方法调用转换器:
value = converter("123");
我认为您不必将参数传递给GetConverter函数。这个实现更好,因为你不使用example参数:
static Func<string, T> GetConverter<T>()
{
return (x) => Convert<T>(x);
}
所以现在你可以使用它:
var converter = A.GetConverter<int>();
int value = converter("123");
PS:如果您知道目标(int)和源(字符串)类型,则可以使用int.TryParse方法。或者您可以使用转换器函数本身而无需另外的函数来包装它,例如:Convert&lt; int&gt;(“123”)