مقارنة DataRow لا تعمل كما هو متوقع
سؤال
أحاول المقارنة بين اثنين DataRow
في حلقة.ومع ذلك، ما يلي 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
}
والسبب لاستخدام أسلوب ثابت بدلا من أسلوب مثيل لتجنب المشاكل مع إشارات فارغة.
نصائح أخرى
تحتوي هذه الخلايا على كائنات، لذا فأنت تقوم بمقارنة الكائنات، والتي تقوم فقط بإجراء مقارنة مرجعية، والتي تختلف عن مقارنة القيم.إنه يطرح السؤال "هل هذان الكائنان هما نفس الكائن حقًا؟"، هل يشيران بشكل أساسي إلى نفس الكائن، ومن ثم "المقارنة المرجعية".عند إجراء استدعاء ToString()، فإنك تقوم بعد ذلك بمقارنة السلسلة.وهذا هو السبب في أنه يعمل.
والمشغل ==
، إن لم يكن فوق طاقتها، غير مطابقة لReferenceEquals()
- أي أنه يحدد ما إذا كان اثنان نظرا object
s هي نفس الحالات
والدعوة إلى ToString()
بإرجاع كائن من الدرجة string
، الذي مثقلة مشغل ==
، والتي لا مقارنة السلسلة.