当我尝试将Object obj
转换为Type T
时,如果无法转换,则出了点问题。
在投射对象之后,我将寻找使用投射对象的方法。
相反,我期望在将其投射的地方得到一个异常,而不是说我将在该对象上使用的地方。
从这个意义上讲,使用DirectCast
代替TryCast
更好吗?
还是我错过了使用TryCast
的其他重要意义?
最佳答案
(对于C#开发人员,TryCast
类似于“as”,而DirectCast
等同于常规转换。正如Mike在注释中指出的那样,“as”适用于可为空的值类型,但TryCast
则无效。)
如果该值确实应该是T
,那么DirectCast
确实是正确的方法-它快速失败,并带有适当的错误。
当目标为“错误”类型合法时,TryCast
是适当的。例如,要将所有Button控件都放在一个容器中,您可以遍历控件集合,然后尝试将每个对象转换为Button。如果可行,您可以对其进行处理-如果无效,请继续。 (通过LINQ,您可以仅使用OfType
来实现此目的,但是您明白我的意思了……)
以我的经验,直接铸造比TryCast
更合适-尽管使用泛型后,我发现自己铸造的频率比以前少很多。