调用函数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);
    }

调用函数Func<;字符串,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")