调用函数Func <string,t>

时间:2015-12-22 00:39:15

标签: c# type-conversion

我有以下功能。我想调用并将字符串转换为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);
    }

1 个答案:

答案 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”)