Я бы хотел восстановить информацию о типах, используя отражение. У меня
public Foo(object coll, string tValue)
{
var x = col1 as IList;
if (x != null)
x.Action();
var y = col1 as IDictionary;
if (y != null)
y.Action();
}
Но хотелось бы иметь
public Foo(object coll, string tValue)
{
var x = col1 as IList<TValue>;
if (x != null)
x.Action();
var y = col1 as IDictionary<int, TValue>;
if (y != null)
y.Action();
}
Можно ли получить и использовать универсальные интерфейсы вместо неуниверсальных интерфейсов коллекции старой школы, учитывая только имя класса?
После того, как тип локальной переменной установлен, я бы не стал платить штрафы за рефлексию и динамический вызов при циклическом просмотре коллекции.
Другой пример, возможно, более понятный:
var list = new Dictionary<int, MyObject>();
list.Add(100, new MyObject());
object listObject = list;
var x = listObject as IDictionary<int, dynamic>;
if (x != null)
{
foreach (var entry in x)
{
Console.WriteLine(entry.Key);
Console.WriteLine(entry.Value);
}
}
х равен нулю ...