如何编写泛型转换函数?

时间:2012-05-04 09:26:44

标签: c# c#-4.0

我正在尝试编写一个通用的转换函数,但我不知道该怎么做。这是我的骨架:

public static T ConvertByGenerics<T>(string value)
        {
            //what do I write here?
            return default(T);
        }

有人可以帮帮我吗?我在函数中写什么来动态地将字符串转换为类型T?

3 个答案:

答案 0 :(得分:2)

尝试类似:

public T ConvertByGenerics<T>(string value, T defaultValue)
{
   if (!string.IsNullOrEmpty(value))
   {
      return (T)Convert.ChangeType(value, typeof(T));
   }

   return defaultValue;
}

答案 1 :(得分:1)

您可能会尝试更多其他内容,但它们涉及动态方法。 代码段中没有足够的异常处理,并且可以在某种程度上进行优化。

public static T ConvertByGenerics<T>(string input) {

    // be mindful of boxing 
    if (input is T) {
        return (T)(object)input;
    }

    if (input == null) {
        // throw arugment exception 
    }

    // can check for int, long ......
    if (typeof(T).IsEnum) {
        return (T)System.Enum.Parse(typeof(T), input, true);
    }

    if (typeof(T).IsAssignableFrom(typeof(string))) {
        return (T)(object)input;
    }

    try {
        return (T)Convert.ChangeType(input, typeof(T));
    }
    catch { //do nothing
    }

    // might want to cache some converters
    System.ComponentModel.TypeConverter converter = System.ComponentModel.TypeDescriptor.GetConverter(typeof(T));
    if (converter.CanConvertFrom(typeof(string))) {
        return (T)converter.ConvertFrom(input);
    }
    else {
        // better though to throw an exception here 
        return default(T);
    }
}

答案 2 :(得分:0)

你想要什么是不可能的。

为了支持任何可想到的类型,你需要知道它将如何表示为字符串 - 一些内置值类型具有Parse方法,“理解”某些格式的字符串并可以解析它们进入类型,但绝对没有办法一般地为所有可能的类型做这个。

您需要编写代码以将字符串转换为每种类型 - 这对于现有的每种类型都不可行。