我正在尝试编写一个通用的转换函数,但我不知道该怎么做。这是我的骨架:
public static T ConvertByGenerics<T>(string value)
{
//what do I write here?
return default(T);
}
有人可以帮帮我吗?我在函数中写什么来动态地将字符串转换为类型T?
答案 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
方法,“理解”某些格式的字符串并可以解析它们进入类型,但绝对没有办法一般地为所有可能的类型做这个。
您需要编写代码以将字符串转换为每种类型 - 这对于现有的每种类型都不可行。