我想写一个通用的转换函数,但我不知道我该怎么做。这是我的骨架:如何编写通用转换函数?
public static T ConvertByGenerics<T>(string value)
{
//what do I write here?
return default(T);
}
有人可以帮我吗?我在函数中写入什么来动态地将字符串转换为T类型?像
我想写一个通用的转换函数,但我不知道我该怎么做。这是我的骨架:如何编写通用转换函数?
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;
}
你想要什么是不可能的。
为了支持任何可能的类型,你需要知道它是如何被表示为一个字符串 - 一些内置的值类型有Parse
方法是“理解”串的某些格式,并可以把它解析为类型,但是对于每种可能的类型绝对没有办法一般地做到这一点。
您需要编写代码将字符串转换为每种类型 - 这对于现有的每种类型都是不可行的。
还有更多的事情可以尝试,但它们涉及动态方法。 代码片段中没有足够的异常处理,当然可以进行一些优化。
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);
}
}
您希望_any_类型可以从字符串中解析出来吗? – Oded
是的,有点。如果我说ConvertByGenerics(“10”),它应该给我10个整数。 –
Jack
你可以看到下面的帖子 http://stackoverflow.com/questions/6884653/how-to-make-a-generic-type-cast-function – Waqar