문제

나는 둘을 비교하려고 노력하고있다 DataRow루프에 s. 그러나 다음은 다음과 같습니다 if 진술은 반환되지 않습니다 true:

if (dt1.Rows[0]["Name"] == dt2.Rows[b]["Name"]) {
    // This never executes
}

그러나 내가 추가하면 .ToString() 각각의 끝까지 DataRow,, if 진술이 반환됩니다 true:

if (dt1.Rows[0]["Name"].ToString() == dt2.Rows[b]["Name"].ToString()) {
    // This now executes
}

"이름"열은 동일한 테이블/열에서 나온 것입니다. 그래서 질문은 아주 간단합니다 ... 내가 뭘 잘못하고 있습니까?

감사
스티븐

도움이 되었습니까?

해결책

처럼 Itsmatt가 말했습니다, 첫 번째 스 니펫은 참조 비교를 수행합니다. 전화의 대안 ToString 사용하는 것입니다 Object.Equals:

if (Object.Equals(dt1.Rows[0]["Name"], dt2.Rows[b]["Name"])) {
    // stuff
}

인스턴스 방법 대신 정적 메소드를 사용하는 이유는 NULL 참조 문제를 피하기 때문입니다.

다른 팁

해당 셀은 물체를 가지고 있으므로 객체 비교를 수행하는데, 이는 값 비교와는 다른 참조 비교를 수행합니다. 그것은 "이 두 객체가 실제로 동일한 객체입니까?"라고 질문합니다. 본질적으로 그들은 동일한 객체를 참조하여 "참조 비교"입니다. ToString () 호출을 할 때 문자열 비교를 수행합니다. 그것이 작동하는 이유입니다.

다음은 MS의 Operator == 및 비교에 대한 링크입니다.

그만큼 == 오버로드되지 않은 경우 연산자는 동일합니다 ReferenceEquals() - 즉, 두 가지가 주어진지 여부를 결정합니다 objectS는 동일한 인스턴스입니다.

전화 ToString() 개체를 반환합니다 string 오버로드 된 클래스 == 문자열 비교를하는 연산자.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top