2017-02-03 18 views
-2

Код последующих не компилируется:Cast MyClass <T> к MyClass <dynamic>

public class Test 
{ 
    public void Run() 
    { 
     List<MyClass<dynamic>> listOfMyClasses = new List<MyClass<dynamic>>(); 

     MyClass<dynamic> myClass = new MyClass<int>(); // Error here 

     listOfMyClasses.Add(myClass); 
    } 

    public class MyClass<T> 
    { 
     public void DoSomething() { } 
     public void DoSomethingSpecial<T>(T t) { } 
    } 
} 

Однако, я считаю, что это имеет смысл, логически (пожалуйста, дайте мне знать, если я ошибаюсь). Предположительно это полезно, поскольку я могу позвонить DoSomething, не зная параметра типа. Как я могу добавить в список myClass?

+3

Если 'MyClass' фактически не использовать общий параметр, то * удалить общий параметр *. – Servy

+0

Это сжатый пример ... очевидно. – AbleArcher

+0

Я мог ошибаться, но я считаю, что генерики требуют определенных типов и не могут быть динамическими или, скорее, двусмысленными. – Edward

ответ

1

Вместо того, чтобы использовать список MyClass<dynamic> просто использовать список dynamic:

public void Run() 
    { 
     List<dynamic> listOfMyClasses = new List<dynamic>(); 

     dynamic myClass = new MyClass<int>(); 

     listOfMyClasses.Add(myClass); 
    } 

    public class MyClass<T> 
    { 
     public void DoSomething() { } 
    } 
+0

Спасибо. Я понимаю, что это можно сделать, но это не отвечает на вопрос. – AbleArcher

+0

@thethuthinnang И в чем вопрос? В чем заключается цель смешения дженериков и динамики? Очевидно, что то, что вы пытаетесь, не работает, но поскольку не ясно, что вы действительно хотите сделать, любой ответ, который мы сделали бы, будет бесполезным, поскольку вопрос находится в текущем неполном состоянии. Вы ожидаете, что мы помогаем вам, предоставляя так мало информации о том, чего вы пытаетесь достичь. – Phil1970

+0

Вопрос был довольно конкретным, и я действительно ожидаю, что люди, которые не оценивают вопрос, просто двигаться дальше. Опять же, вопрос заключается в том, как добавить 'myClass' в' listOfMyClasses' (используйте мои определения, конечно). Если это не может быть достигнуто каким-либо образом, тогда не стесняйтесь добавлять это в качестве ответа. – AbleArcher