Domanda

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

Ovviamente le espressioni in caso non sono costanti.Ma mi piacerebbe sapere perché i GUIDi non possono essere conosciuti con il tempo di compilazione?(stupido domanda credo).

Alla fine della giornata sembra che tu sia necessario utilizzare if then else Imbrificato per il test contro typeid e questo è l'unico modo per andare, giusto?

È stato utile?

Soluzione

Semplicemente: il CLR non ha la rappresentazione dei metadati di un Guid ... o in effetti DateTime o Decimal, come altri candidati ovvi.Ciò significa che non vi è una rappresentazione costante di Guid e i casi di commutazione devono essere costanti, almeno in c # e sospetto anche in c ++ / cli.

Ora che non ha per essere un bloccante ... c # consente i valori decimali const tramite un fondente e le lingue potrebbe fare la stessa cosa per i GUIDi, eQuindi consentono di accenderli.La lingua può decidere come implementerà la commutazione, dopo tutto.

Sospetto che i progettisti C ++ / CLI ritengano che sarebbe un caso di uso sufficientemente raro che non valesse la pena di complicare la lingua e il compilatore per sostenerlo.

Altri suggerimenti

Solo le stringhe, i tipi e gli enogiani possono essere utilizzati in .NET in un'istruzione Switch.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top