我通常使用 JavaScript,但我的任务是梳理一些编写了几年的 C# 代码来替换它。
我遇到了一个例子,我正试图绕过我的头。根据我的理解ReferenceEquals()是用来比较两个对象以确定它们是否是同一个实例。但在代码中,我看到传入的第二个参数不是对象,而是null:
string type = ReferenceEquals(employee.wage_type, null)
? "W2"
: employee.wage_type.Replace(".", string.Empty);
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,这在这里做什么?是否有效地说,如果employee.wage_type等于null则分配“W2”。如果没有,获取找到的值.并将其替换为空字符串?这听起来正确吗?
如果是这样,仅仅检查值是否是null直接的而不是使用ReferenceEquals()which 来比较对象不是更简单吗?还是我误解了ReferenceEquals()可以/用于什么?
根据我的理解
ReferenceEquals()是用来比较两个对象以确定它们是否是同一个实例
嗯,不完全是。它用于确定两个引用是否相同。这些引用为空绝对没问题。
如果是这样,直接检查值是否为 null 而不是使用
ReferenceEquals()which 来比较对象会更简单吗?
如果类型重载==运算符本身,它会有所作为。ReferenceEquals总是,总是直接比较引用——而==操作符可以执行用户指定的代码(例如,string有一个重载bool ==(string, string))。
在现代 C# 代码中,更惯用的方法是使用模式匹配:
string type = employee.wage_type is null
? "W2"
: employee.wage_type.Replace(".", string.Empty);
Run Code Online (Sandbox Code Playgroud)
...但在这种情况下,我实际上会使用空安全解除引用运算符:
string type = employee.wage_type?.Replace(".", "") ?? "W2";
Run Code Online (Sandbox Code Playgroud)
(请注意,我还会重命名wage_type以遵循 .NET 命名约定。)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |