gpt4 book ai didi

C# -- 是否需要检查 "obj is Person && obj != null"

转载 作者:可可西里 更新时间:2023-11-01 09:00:33 24 4
gpt4 key购买 nike

我看到了下面的代码,

public override bool Equals(object obj)
{
// From the book http://www.amazon.co.uk/Pro-2010-NET-4-0-Platform/dp/1430225491
// Page 254!
if (obj is Person && obj != null)
...
}

根据我的理解,我认为代码应该重写如下:

public override bool Equals(object obj)
{
if (obj is Person)
...
}

对吗?

基于 http://msdn.microsoft.com/en-us/library/scekt9xw%28v=vs.80%29.aspx

如果提供的表达式不为空,则 is 表达式的计算结果为真,并且可以将提供的对象强制转换为提供的类型,而不会导致抛出异常。

我认为根本没有必要额外检查 null。换句话说,代码“obj != null”根本不应该被命中。

谢谢

//已更新//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
class Employee
{
public static void CheckIsEmployee(object obj)
{
if (obj is Employee)
{
Console.WriteLine("this is an employee");
}
else if (obj == null)
{
Console.WriteLine("this is null");
}
else
{
Console.WriteLine("this is Not an employee");
}
}
}

class NotEmployee
{ }

class Program
{
static void Main(string[] args)
{
Employee e = new Employee();

Employee.CheckIsEmployee(e);

Employee f = null;
Employee.CheckIsEmployee(f);

NotEmployee g = new NotEmployee();
Employee.CheckIsEmployee(g);
}
}
}

输出结果:

this is an employee
this is null
this is Not an employee

最佳答案

我的偏好是使用 as 关键字。

public override bool Equals(object obj)
{
var objectToCompare = obj as Person;
if ( objectToCompare == null )
return false;
...
}

优点是稍后在该方法中,您有一个类型化实例 (objectToCompare) 用于进行比较。

如果 obj 不是从 Person 派生的或者如果 obj 为 null 并且因此 obj is Person && obj != null,您的评估是正确的 obj is Person code> 是多余的;如果你正在使用那种风格,你只需要obj is Person。从技术上讲,通过先检查 null 可能会带来一些性能提升,但这种提升可以忽略不计。

关于C# -- 是否需要检查 "obj is Person && obj != null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com