如何编写通用转换函数

本文关键字:转换 函数 何编写 | 更新日期: 2023-09-27 18:33:14

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

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

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

如何编写通用转换函数

尝试类似操作:

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

您还可以尝试更多方法,但它们涉及动态方法。代码段中没有足够的异常处理,当然可以进行一些优化。

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);
    }
}

你想要的是不可能的。

为了支持任何可以想象的类型,您需要知道如何将其表示为字符串 - 一些内置值类型具有Parse方法,可以"理解"某些格式的字符串并可以将它们解析为类型,但绝对没有办法为每个可以想象的类型通常执行此操作。

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