ألا ينبغي استخدام FieldInfo.setValue لتعيين ValueType إلى فشل الفرق؟
-
01-10-2019 - |
سؤال
(متعلق ب PropertyInfo setValue و Nulls)
لو كنت أملك public class Thing { public int X; }
, ، أ Thing o
, ، و FieldInfo fi
هذا يشير إلى X
الحقل ، لماذا من القانوني الاتصال fi.SetValue(o, null)
؟ وقت التشغيل يحدد الحقل X
إلى الصفر ، أي default(int)
بدلا من الشكوى أن أ ValueType
لا يمكن ضبطها على null
.
هل يعرف أي شخص اختيار التصميم وراء هذا السلوك ، والذي على الأقل من C# ينتهك مبدأ أقل من الدهشة؟
المحلول
النص الوارد في مربع الاستثناءات ArgumentException
يشير إلى أن القيمة التي تم تمريرها تخضع ل تحويلات, ، مما يفسر سبب نجاحه.
لا يمكن تحويل معلمة القيمة وتخزينها في الحقل.
أوافق على أنه يبدو غريباً بعض الشيء ، خاصةً حيث أتوقع عمومًا أن تكون واجهات برمجة تطبيقات الانعكاس واحدة من أكثر الصلابة وأقل تسامحًا.
قد تحاول الاتصال إريك ليبرت ، في حين أن هذا سؤال BCL/CLR بدلاً من C#، هناك فرصة أنه سيعرف الإجابة أو يعرف شخصًا يفعل. إما ذلك أو تكون قادرًا على إعطاء تخمين جيد جدًا.