Generic List of Generic Interfaces not allowed, any alternative approaches?

前端 未结 3 826
孤独总比滥情好
孤独总比滥情好 2021-02-03 23:41

I am trying to find the right way to use a Generic List of Generic Interfaces as a variable.

Here is an example. It is probably not the best, but hopefully you will get

相关标签:
3条回答
  • 2021-02-04 00:03

    You say it won't work because you don't define T. So define it:

    public class Holder<T>
    {
        public List<IPrimitive<T>> Primitives {get;set;}
    }
    
    0 讨论(0)
  • 2021-02-04 00:20

    John is correct.

    Might I also suggest (if you are using C# 4) that you make your interface covariant?

    public interface IPrimitive<out T>
    {
         T Value { get; }
    }
    

    This could save you some trouble later when you need to get things out of the list.

    0 讨论(0)
  • 2021-02-04 00:24
    public interface IPrimitive
    {
    
    }
    
    public interface IPrimitive<T> : IPrimitive
    {
         T Value { get; }
    }
    
    public class Star : IPrimitive<T> //must declare T here
    {
    
    }
    

    Then you should be able to have

    List<IPrimitive> primitives = new List<IPrimitive>;
    
    primitives.Add(new Star());   // Assuming Star implements IPrimitive
    primitives.Add(new Sun());    // Assuming Sun implements IPrimitive
    
    0 讨论(0)
提交回复
热议问题