当我尝试将Object obj转换为Type T时,如果无法转换,则出了点问题。

在投射对象之后,我将寻找使用投射对象的方法。

相反,我期望在将其投射的地方得到一个异常,而不是说我将在该对象上使用的地方。

从这个意义上讲,使用DirectCast代替TryCast更好吗?
还是我错过了使用TryCast的其他重要意义?

最佳答案

(对于C#开发人员,TryCast类似于“as”,而DirectCast等同于常规转换。正如Mike在注释中指出的那样,“as”适用于可为空的值类型,但TryCast则无效。)

如果该值确实应该是T,那么DirectCast确实是正确的方法-它快速失败,并带有适当的错误。

当目标为“错误”类型合法时,TryCast是适当的。例如,要将所有Button控件都放在一个容器中,您可以遍历控件集合,然后尝试将每个对象转换为Button。如果可行,您可以对其进行处理-如果无效,请继续。 (通过LINQ,您可以仅使用OfType来实现此目的,但是您明白我的意思了……)

以我的经验,直接铸造比TryCast更合适-尽管使用泛型后,我发现自己铸造的频率比以前少很多。

07-27 13:43