不同类型的列表,动态铸造

Pio*_*fer 0 c# generics casting

我有以下问题:

  • 我需要存储具有不同类型参数的通用对象,如javish Sth<A,?>,
  • "?" 类型通常是原始的,因此不是真正可扩展/可变的
  • 我需要在列表的每个元素上执行一些方法
    • 不同类型的不同方法,或至少这些方法的不同重载

虽然我不知道如何存储这些类型,但我们假设List<object>为了简单起见.

我可以将某个类型的问题存储在(List<KeyValuePair<Type,object>>),typeof()然后,如何将我的对象转换回所需的类型?就像是

foreach(var entry in myList)
{
    var obj = (Sth<A, entry.Key>) entry.Value;
    myMethod(obj); //This can have overloads for object, Sth<A,int>, Sth<A,string>,
                   // etc. Generally, I need a correct type of obj here.
}
Run Code Online (Sandbox Code Playgroud)

当然myMethod<T>是一个通用的库方法,有太多的重载if-else它与obj is Sth<A, uint>...

我想我可以创建一个基于entry.Key然后填充的新对象

这种类型的组合甚至可能吗?

我相信,答案在于正确的创造myList,但我不知道该怎么做.

任何帮助,将不胜感激!

圣诞快乐 :)

Jon*_*eet 6

如果您使用的是C#4,则可以使用dynamic以下内容:

foreach (KeyValuePair<A, object> entry in myList)
{
    dynamic value = entry.Value;
    myMethod(value);
}
Run Code Online (Sandbox Code Playgroud)

现在将根据执行时间类型在执行时执行重载决策value.