Roy*_*mir 0 c# generics .net-4.0
我见过这段代码:
StringBuilder Foo<T> (T arg)
{
if (arg is StringBuilder)
return (StringBuilder) arg; // Will not compile
...
}
Run Code Online (Sandbox Code Playgroud)
但是:
StringBuilder Foo<T> (T arg)
{
StringBuilder sb = arg as StringBuilder;
if (sb != null) return sb;
...
}
Run Code Online (Sandbox Code Playgroud)
将编译.
这是为什么 ?编译器害怕什么?
ps我见过另一个解决方案:
(StringBuilder) (object) arg
Run Code Online (Sandbox Code Playgroud)
我认为,因为类型T和类型之间没有保证转换StringBuilder.指定它arg as StringBuilder,如果转换失败,它将返回a null而不是异常,就像在previouse情况下一样.Null是一个有效的案例,在这个函数中,就像一个返回类型.