كيف نجعل الكائنات "تفترض" أنها حصلت على حمل زائد للمشغل X؟

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

سؤال

هل هناك طريقة لإجبار مترجم C# على تجاهل التحميل الزائد للمشغل المفقود للكائنات، والتعامل بدلاً من ذلك مع التحقق في وقت التشغيل؟أسأل لأن لدي حاوية تحتوي على كائنات متعددة لها سمات مختلفة من النوع int وstring وushort وما إلى ذلك.أقوم بإنشاء وظيفة بحث لهذه الحاوية، وأود أن أتمكن من البحث في مجالات مختلفة.

أنا أستخدم المسندات وتعبيرات لامدا.

وهذا ما أريد:

var data = container.Retrieve(ID => (ID == 5), Date => (Date > somedate));

بافتراض أن المعرف والتاريخ هما حقلان في كائنات الحاوية

هذا ما يجب أن أفعله اليوم (رغم أنه يعمل):

var data = container.Retrieve(ID => ((int)ID == 5), Date => ((DateTime)Date > somedate));

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

هل هناك أي طريقة لتحقيق هذا؟

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

المحلول

لا، C# 3.0 لا يدعم المشغلين دون معرفة النوع.

في C# 4.0 يمكنك القيام بذلك باستخدام dynamic, ، لكنه أبطأ.

في حالتك أنت يعرف ما ينبغي أن تكون عليه الأنواع - لذا فقط ألقي (كما أنت).


وفي الحالة الأكثر عمومية:

مع أنواع غير معروفة، انظر Comparer.Default.Compare و object.Equals...

مع الأدوية الجنيسة؛ينظر الى Comparer<T>.Default.Compare(x,y) - يجب أن تفعل كل ما تحتاجه >,>=,< و <= (بما في ذلك القيم الخالية وما إلى ذلك).على نفس المنوال EqualityComparer<T>.Default.Equals(x,y) مقابض == و != (بما في ذلك القيم الخالية وما إلى ذلك).

لمزيد من المشغلين (+,-,* الخ) - أنظر MiscUtil

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top