当我尝试强制转换Object obj为Type时T,如果无法强制转换,则会出现错误.
在我投射对象之后,我将寻找使用投射对象.
相反,我会期望在我将要投射它的地方得到一个例外,而不是说我将使用该对象.
从这个意义上说,使用它DirectCast代替TryCast?或者我错过了使用其他一些意义TryCast?
Jon*_*eet 39
(对于C#开发,TryCast类似"视"和DirectCast正常铸造的等价物.麦克在评论中指出,"作为"空值类型的作品,但TryCast没有.)
如果值确实应该是a T,那么DirectCast确实是正确的方法 - 它会快速失败并出现相应的错误.
TryCast当目标成为"错误"类型是合法的时候是合适的.例如,要获取容器中的所有Button控件,您可以浏览控件集合并尝试将每个控件转换为Button.如果它有效,你会用它做一些事情 - 如果没有,你继续前进.(使用LINQ,你可以只OfType为此目的使用,但你明白我的意思......)
根据我的经验,直接铸造比经常更合适TryCast- 虽然使用仿制药我发现自己的铸造频率比以往任何时候都少.
Jon*_*jap 15
两者之间的唯一区别是,a TryCast如果失败则返回null,而a DirectCast将抛出异常.
这些对您如何处理程序有影响.就个人而言,如果不正确演员的可能性(例如,用户输入的文本输入框被转换为数字类型)非常高,我更喜欢不必抛出异常.
我认为其他人已经提到了你应该而且不应该执行"安全施法"的时间(在你冒着异常的情况下确保施法可以成功的地方).如果您的程序确实需要执行安全转换,那么该TryCast方法可以节省您和程序的一些工作.
TryCast()直到今天我才意识到这个功能,而且我觉得使用安全铸造的"坏"方法是个傻瓜.
如果您不了解该TryCast()功能,那么您最终可能会遇到以下情况:
'' wasteful, the TypeOf and DirectCast calls are redundant
If TypeOf obj Is SomeClass Then
someObj = DirectCast(obj, SomeClass)
'' More code
End If
Run Code Online (Sandbox Code Playgroud)
问题是这个方法实际上执行了两次转换(技术上我认为它们实际上是类型检查).使用TryCast和检查结果是否为Nothing消除了第二次演员并节省了不必要的工作.
'' efficient, only one cast is ever performed and there are no InvalidCastExceptions thrown
someObj = TryCast(obj, SomeClass)
If someObj IsNot Nothing Then
'' More code
End If
Run Code Online (Sandbox Code Playgroud)
遵循此模式可以避免必须处理昂贵的异常,并有效地转换为正确的类型.
| 归档时间: |
|
| 查看次数: |
32141 次 |
| 最近记录: |