Enum as Dictionary keys

后端 未结 2 1277
情书的邮戳
情书的邮戳 2021-01-11 09:17

Suppose to have

enum SomeEnum { One, Two, Three };

SomeEnum is an enum so it is supposed to inherit from Enum so why if I write:

         


        
相关标签:
2条回答
  • 2021-01-11 09:54

    Enum in its declaration is not a class that is equal to SomeEnum. It should be

    Dictionary<SomeEnum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();
    
    0 讨论(0)
  • 2021-01-11 10:16

    I believe that's because of covariance.

    In short:

    aDictionary will be a Dictionary<SomeEnum, SomeClass>, but in the current context it is known as Dictionary<Enum, SomeClass>.

    Had your declaration been allowed, the compiler should afterwards let you do:

    aDictionary.Add(someValueFromAnotherEnumUnrelatedToSomeEnum, aValue);
    

    which is obviously inconsistent with respect to the actual type of the dictionary.

    That's why co-variance is not allowed by default and you have to explicitly enable it in cases where it makes sense.

    The conclusion is that you have to specify the type exactly:

    Dictionary<SomeEnum, SomeClass> aDictionary = 
        new Dictionary<SomeEnum, SomeClass>();
    
    0 讨论(0)
提交回复
热议问题