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

时间:2011-12-23 14:06:53

标签: 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.
}

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

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

这种类型的组合是否可能?

我相信,答案在于myList的正确创造,但我不知道如何去做。

任何帮助将不胜感激!

圣诞快乐:)

1 个答案:

答案 0 :(得分:6)

如果您使用的是C#4,则可以使用dynamic

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

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