문제
나는 둘을 비교하려고 노력하고있다 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 () 호출을 할 때 문자열 비교를 수행합니다. 그것이 작동하는 이유입니다.
그만큼 ==
오버로드되지 않은 경우 연산자는 동일합니다 ReferenceEquals()
- 즉, 두 가지가 주어진지 여부를 결정합니다 object
S는 동일한 인스턴스입니다.
전화 ToString()
개체를 반환합니다 string
오버로드 된 클래스 ==
문자열 비교를하는 연산자.
제휴하지 않습니다 StackOverflow