【问题标题】:Cast MyClass<T> to MyClass<dynamic>将 MyClass<T> 转换为 MyClass<dynamic>
【发布时间】:2017-02-03 19:20:37
【问题描述】:

以下代码无法编译:

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 添加到列表中?

【问题讨论】:

  • 如果MyClass实际上没有使用泛型参数,那么移除泛型参数
  • 这是一个浓缩的例子……显然。
  • 我可能是错的,但我相信泛型需要特定的类型,不能是动态的或模棱两可的
  • @Edward dynamic 是一个完全有效的泛型类型参数。
  • @thethuthinnang 如此简洁以至于我们几乎不知道您真正想要做什么。 显然,解决问题的方法通常取决于细节。因此,为自己保留所有信息是以自我为中心的。

标签: c# generics dynamic casting


【解决方案1】:

不要使用MyClass&lt;dynamic&gt; 的列表,而是使用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() { }
    }

【讨论】:

  • 谢谢。我意识到这可以做到,但它没有回答问题。
  • @thethuthinnang 问题是什么?混合泛型和动态的目的是什么?显然,您正在尝试的方法不起作用,但由于尚不清楚您真正想要做什么,因此我们所做的任何答案都将与问题处于当前不完整状态一样无用。您希望我们能够为您提供帮助,同时提供很少的关于您想要实现的目标的信息。
  • 这个问题相当具体,我真的希望那些不理解这个问题的人继续前进。同样,问题是如何将myClass 添加到listOfMyClasses(当然使用我的定义)。如果这不能以任何方式完成,请随时添加作为答案。
猜你喜欢
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2021-02-26
  • 2017-05-28
  • 2013-04-03
  • 1970-01-01
  • 2018-02-24
  • 2014-09-19
相关资源
最近更新 更多