代码之家  ›  专栏  ›  技术社区  ›  Kroltan

将B添加到List<A<object>,其中B使用值类型实现A

  •  2
  • Kroltan  · 技术社区  · 8 年前

    给定以下类型和代码段:

    interface IFoo<out T> {
        T doThing();
    }
    
    class Bar : IFoo<int> {
        int doThing() => 0;
    }
    
    var list = new List<IFoo<object>> {
        new Bar() //fails to compile
    };
    

    我知道不可能添加 Bar List<IFoo<object>> 因为 酒吧 T 是值类型。

    鉴于我需要 IFoo 打字安全,我该如何更改 酒吧 或集合,以便可以同时存储 IFoo<T> 对于某些值和引用类型?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Guru Stron    8 年前

    基本上,我在这里只看到一个选项:

        public interface IFoo<out T>:IFoo
        {
            T doThing();
        }
    
        public interface IFoo
        {
            object doThing();
        }
    
        public class Bar : IFoo<int>
        {
            public int doThing(){return 0;}
            object IFoo.doThing()
            {
                return doThing();
            }
        }
    
        var list = new List<IFoo> 
        {
            new Bar()
        };