Tag: 三元运营商

在x64平台上的调试器中奇怪的三元运算符行为

我在C#代码中使用了一个非常简单的三元表达式: helperClass.SomeData = helperClass.HasData ? GetSomeData() : GetSomeOtherData(); 在这两种情况下,表达式的每个路径上的函数都返回一个非null对象,但是如果我在调试器中查看结果,它将为null,直到我在代码中引用它,例如使用assert: Debug.Assert(helperClass.SomeData != null); 只有在调试模式下使用“x64”或“Any CPU”平台设置时才会出现这种情况。 它在“x86”模式下很好用。 在假设我在编译器或调试器中发现了一个错误之前,我试着非常谨慎,但我找不到任何其他解释这种行为。 这是一个完整的类来做一个repro,只需在x64模式下调试器中调用SomeClass.SomeAction()并逐步查看它: public class SomeClass { public bool HasData; public object SomeData; private SomeClass() { HasData = false; } public static void SomeAction() { var helperClass = new SomeClass(); // Exhibits weird debugger behavior of having helperClass.SomeData = null after […]

为什么C#三元运算符不能与代理一起使用?

分支选择函数时,使用三元运算符选择函数可能是有意义的,但这是不可能的。 为什么? public class Demo { protected bool branch; protected void demo1 () {} protected void demo2 () {} public Action DoesntWork() { return branch ? demo1 : demo2; } } 编译器产生以下错误: Cannot implicitly convert type `method group’ to `System.Action’