C#添加可空小数和优先级??操作者
假设一个C#程序具有两个可为空的十进制属性A和B.
以下添加仅返回A的值: var result = A ?? 0 B ?? 0; 正确的用法是: var result =(A ?? 0)(B ?? 0); 示例控制台程序: class Program { static void Main(string[] args) { A = (decimal)0.11; B = (decimal)0.69; NullableDecimalAddition(); Console.ReadLine(); } public static decimal? A { get; set; } public static decimal? B { get; set; } private static void NullableDecimalAddition() { decimal result1 = A ?? 0 + B ?? 0; decimal result2 = (A ?? 0) + (B ?? 0); Console.WriteLine("result1: " + result1); // = 0.11 Console.WriteLine("result2: " + result2); // = 0.80 } } 我的问题是在使用result1进行计算时会发生什么.怎么是和?的优先级操作符? 解决方法
tinstaafl的回答是正确的.扩展它:
?? ??运算符是右关联的,运算符的优先级更高.因此A ?? 0 B ?? 0相当于A ?? ((0 B)?? 0),而不是(A ?? 0)(B ?? 0). 因此A ??的作用0 B ?? 0是: >计算A,您声明的类型为可为空的十进制.如果它为非null,则获取其十进制值作为结果.我们现在完成了; B从未计算过. 这不是你想要的行动;你可以用(A ?? 0)(B ?? 0)获得你想要的动作.如果您的意图相反意味着“如果任何一方为空则使用零”那么你可以使用(A B)?? 0.括号在后者中是不必要的,但鉴于你对vs ??的优先级感到困惑,这是一个好主意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |