c# لماذا لا يمكن تعيين قيمة int لاغية كقيمة [مكررة]

StackOverflow https://stackoverflow.com/questions/330471

  •  11-07-2019
  •  | 
  •  

سؤال

اشرح سبب عدم إمكانية تعيين قيمة فارغة لقيمة فارغة، على سبيل المثال

int? accom = (accomStr == "noval" ? null  : Convert.ToInt32(accomStr));

ما هو الخطأ في هذا الرمز؟

هل كانت مفيدة؟

المحلول

ليست المشكلة أنه لا يمكن تعيين قيمة فارغة إلى int؟.تكمن المشكلة في أن كلا القيمتين اللتين يتم إرجاعهما بواسطة عامل التشغيل الثلاثي يجب أن تكونا من نفس النوع، أو يجب أن تكون إحداهما قابلة للتحويل ضمنيًا إلى الأخرى.في هذه الحالة، لا يمكن تحويل القيمة null ضمنيًا إلى int أو العكس، لذا من الضروري إجراء عملية تحويل صريحة.جرب هذا بدلاً من ذلك:

int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));

نصائح أخرى

ما يقوله Harry S صحيح تمامًا، ولكن

int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));

سوف تفعل الخدعة أيضا.(نحن مستخدمي Resharper يمكننا دائمًا اكتشاف بعضنا البعض في الحشود ...)

خيار آخر هو الاستخدام

int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr); 

أنا أحب هذا أكثر.

وبالمثل فعلت لفترة طويلة:

myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top