알람 - windows timer c#




C#개체가 null이 아니지만(myObject!=null) 여전히 false를 반환합니다. (6)

여기이 수표가 옳지 않은가?

public static bool operator !=(Region r1, Region r2)
{
    if (object.ReferenceEquals(r1, null))
    {
        return false;
    }
    if (object.ReferenceEquals(r2, null))
    {
        return false;
    }
...

나는 객체와 NULL 사이의 비교를 할 필요가있다. 개체가 NULL이 아닌 경우 일부 데이터로 채 웁니다.

다음은 코드입니다.

 if (region != null)
 {
  ....
 }

이 작동하지만 루프 및 루핑 때 언젠가 영역 개체를 null이 아닙니다 (나는 디버그 모드에서 데이터를 볼 수 있습니다). 디버깅 할 때 단계별로 IF 문 안에 들어 가지 않습니다 ... 다음 식으로 빠른 조사를 할 때 : (영역 == null)이 false를 반환하고 (영역! = null을 참조하십시오. ) false도 반환 ... 왜 그리고 어떻게?

최신 정보

누군가가 객체가 == 및! = 오버로드됨을 지적합니다.

    public static bool operator ==(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }

        return (r1.Cmr.CompareTo(r2.Cmr) == 0 && r1.Id == r2.Id);
    }


    public static bool operator !=(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }
        return (r1.Cmr.CompareTo(r2.Cmr) != 0 || r1.Id != r2.Id);
    }

오버로드가 모두 올바르지 않습니다.

 public static bool operator ==(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }

        return (r1.Cmr.CompareTo(r2.Cmr) == 0 && r1.Id == r2.Id);
    }

r1과 r2가 null의 경우, r2도 null에서도, 최초의 테스트 ( object.ReferenceEquals (r1, null) )는 false를 돌려줍니다.

시험

//ifs expanded a bit for readability
 public static bool operator ==(Region r1, Region r2)
    {
        if( (object)r1 == null && (object)r2 == null)
        {
           return true;
        }
        if( (object)r1 == null || (object)r2 == null)
        {
           return false;
        }        
        //btw - a quick shortcut here is also object.ReferenceEquals(r1, r2)

        return (r1.Cmr.CompareTo(r2.Cmr) == 0 && r1.Id == r2.Id);
    }

이러한 운영자 과부하는 고장났습니다.

첫째로,! =가 구현되면 ==를 호출하고 결과를 반전시킴으로써 더 쉽게 삶을 살 수 있습니다.

둘째, 무효 검사를하기 전에 ==가 있어야합니다 :

if (object.ReferenceEquals(r1, r2))
{
    return true;
}

보고있는 매개 변수 옆의 새로 고침 아이콘을 클릭해야 할 수도 있습니다. VS는 모든 문장 / 매개 변수를 평가하지 않으면 서 성능을 따라 잡으려고 노력합니다. 비 관련 장소를 변경하기 전에 먼저 확인하십시오.


bool comp;
if (object.IsNullOrEmpty(r1))
{
    comp = false;
}

if (object.IsNullOrEmpty(r2))
{
    comp = false;
}
return comp;

지역 객체의 클래스에 == 및 / 또는! = 연산자가 오버로드 되었습니까?

이제 오버로드에 대한 코드를 게시했습니다.

과부하는 다음과 같이 보일 것입니다 ( Jon SkeetPhilip Rieck의 게시물에서 가져온 코드).

public static bool operator ==(Region r1, Region r2)
{
    if (object.ReferenceEquals( r1, r2)) {
        // handles if both are null as well as object identity
        return true;
    }

    if ((object)r1 == null || (object)r2 == null)
    {
       return false;
    }        

    return (r1.Cmr.CompareTo(r2.Cmr) == 0 && r1.Id == r2.Id);
}

public static bool operator !=(Region r1, Region r2)
{
    return !(r1 == r2);
}




compare