tse*_*mer -1 c# casting value-type
我完全知道为什么 as不能用于值类型.但是,我所知道的唯一替代品是:
if (!(obj is MyValueType)) { // Type check #1
// Exception or whatnot
}
var myValueType = (MyValueType)obj; // Type check #2
Run Code Online (Sandbox Code Playgroud)
但是,此代码执行两次类型检查,这会产生性能成本,as而引用类型的成本相同.
我的问题:对于值类型,是否有更好的性能机制/语法?
我能想到的唯一单一类型检查机制是try/catch,但这当然具有自己的性能成本,我尽量避免基于异常的编程.
你可以使用:
var maybeValueType = obj as MyValueType?;
if (maybeValueType != null)
{
// Use maybeValueType.Value
}
Run Code Online (Sandbox Code Playgroud)
然而,这种执行更糟比is+铸造 -或者至少已经过去.
C#7可能会解决这个问题:
if (obj is MyValueType value)
{
// Use value here
}
Run Code Online (Sandbox Code Playgroud)
......但很明显,直到C#7被钉住,这还不确定.