لماذا تعتبر تعبيرات التبديل من النوع "System::Guid" غير قانونية؟

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

سؤال

void Foo(Type^ type)
{
  System::Guid id = type->GUID;
  switch (id)
  {
  case System::Byte::typeid->GUID:
    ...
    break;
  ...
  }

من الواضح أن تعبيرات الحالة ليست ثابتة.لكني أود أن أعرف لماذا لا يمكن معرفة المعرفات الفريدة العمومية (GUIDs) في وقت الترجمة؟(سؤال سخيف أعتقد).

في نهاية اليوم يبدو أنه يجب عليك استخدام المتشابكة if then else للاختبار ضد typeid وهذه هي الطريقة الوحيدة للذهاب، أليس كذلك؟

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

المحلول

ببساطة:لا يحتوي CLR على تمثيل للبيانات التعريفية لـ a Guid...أو في الواقع DateTime أو Decimal, ، كما هو الحال مع المرشحين الواضحين الآخرين.وهذا يعني أنه لا يوجد تمثيل ثابت ل Guid, ، ويجب أن تكون حالات التبديل ثوابت، على الأقل في C# وأظن في C++/CLI أيضًا.

الآن هذا لا يحدث يملك أن تكون مانعاً..يسمح C# بالقيم العشرية الثابتة عبر الهراء واللغات استطاع افعل نفس الشيء مع الأدلة، ثم اسمح لك بتشغيلها.يمكن للغة أن تقرر كيفية تنفيذ التبديل، بعد كل شيء.

أظن أن مصممي C++/CLI شعروا أنها ستكون حالة استخدام نادرة بدرجة كافية بحيث لا تستحق تعقيد اللغة والمترجم لدعمها.

نصائح أخرى

يمكن استخدام السلاسل والأنواع المتكاملة والتعدادات فقط في .NET في بيان التبديل.

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