In C#, why can't a List object be stored in a List<object> variable

前端 未结 14 1367
别跟我提以往
别跟我提以往 2020-11-22 03:42

It seems that a List object cannot be stored in a List variable in C#, and can\'t even be explicitly cast that way.

List sl = new List

        
14条回答
  •  北海茫月
    2020-11-22 04:31

    Think of it this way, if you were to do such a cast, and then add an object of type Foo to the list, the list of strings is no longer consistent. If you were to iterate the first reference, you would get a class cast exception because once you hit the Foo instance, the Foo could not be converted to string!

    As a side note, I think it would be more significant whether or not you can do the reverse cast:

    List ol = new List();
    List sl;
    sl = (List)ol;
    
    
    

    I haven't used C# in a while, so I don't know if that is legal, but that sort of cast is actually (potentially) useful. In this case, you are going from a more general class (object) to a more specific class (string) that extends from the general one. In this way, if you add to the list of strings, you are not violating the list of objects.

    Does anybody know or can test if such a cast is legal in C#?

    提交回复
    热议问题