在C#中检查变量的类型有多贵?
E.g。使用try
/ catch
与使用as
与使用typeof
对比。
无需进行绝对测量。 :)
答案 0 :(得分:5)
try
/ catch
肯定更慢,因为抛出的异常会导致收集堆栈信息。
as
/ is
用于与编译时已知的类型进行比较并满足继承(即"string" is Object
返回true
)
typeof
/ GetType()
可用于运行时已知但不满足继承的类型(即。"string".GetType() == typeof(Object)
返回false
)
无论如何,我认为您可能需要as
(或is
如果您不需要演员值)
答案 1 :(得分:2)
昂贵的完全无关紧要;你应该从不使用异常处理作为控制流的一种形式,如果你可以避免它。它被称为“异常处理”,因为它只应发生在特殊的,不可避免的情况下。无效的类型转换例外是错误,应该修复。 始终使用“is”,“as”或“GetType()”来确定事物的类型。
答案 2 :(得分:1)
如果您只想检查该类型,则应使用is
运算符。