In general, you will have to either use List<object>or create a base class that is not generic, like
public abstract class ValuePair
{
public string Name { get; set;}
public abstract object RawValue { get; }
}
public class ValuePair<T> : ValuePair
{
public T Value { get; set; }
public object RawValue { get { return Value; } }
}
Then you can have List<ValuePair>.
Now there is one exception: covariant / contravariant types in C # 4. For example, you can write:
var streamSequenceList = new List<IEnumerable<Stream>>();
IEnumerable<MemoryStream> memoryStreams = null;
IEnumerable<NetworkStream> networkStreams = null;
IEnumerable<Stream> streams = null;
streamSequenceList.Add(memoryStreams);
streamSequenceList.Add(networkStreams);
streamSequenceList.Add(streams);
This is not applicable in your case because:
- You are using a generic class, not an interface
- ,
T, "" "" API - , (
IEnumerable<int> IEnumerable<object>)