如何编写通用转换函数
本文关键字:转换 函数 何编写 | 更新日期: 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
方法,可以"理解"某些格式的字符串并可以将它们解析为类型,但绝对没有办法为每个可以想象的类型通常执行此操作。
您需要编写代码以从字符串转换为每种类型 - 这对于现有的每种类型都不可行。