kle*_*npa 6 c# string generics casting
我正在编写一个方法来进行智能类型转换 - 如果类型参数恰好是一个字符串,则使用ToString(),否则转换,但如果转换不起作用则返回null.基本上可以从中获取尽可能多的信息v而不会抛出异常.
我在尝试演员之前检查T确实是一个string,但编译器仍然不是粉丝:
Cannot convert type 'string' to 'T'
Run Code Online (Sandbox Code Playgroud)
这是我的方法:
public T? Convert<T>(object v)
{
if (typeof(T) == typeof(string)) {
return (T)v.ToString(); // Cannot convert type 'string' to 'T'
} else try {
return (T)v;
} catch (InvalidCastException) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是某种不可饶恕的罪,请告诉我.我用它来处理一些可能有混合类型的数据结构.
Jon*_*eet 25
object在转换为泛型类型时,您基本上需要经历:
return (T)(object) v.ToString()
Run Code Online (Sandbox Code Playgroud)
和
return (T)(object) v;
Run Code Online (Sandbox Code Playgroud)
我会使用is而不是捕捉一个InvalidCastException.
有关为何需要这些内容的详细信息,请参阅Eric Lippert最近的博客文章.
特别是:
因为编译器知道这种转换可能成功的唯一方法是如果
U是bool,但U可以是任何东西!编译器假定大部分时间U都不会构造bool,因此这段代码几乎肯定是一个错误,编译器正在引起你的注意.
(替代T的U和string为bool......)
| 归档时间: |
|
| 查看次数: |
10700 次 |
| 最近记录: |