[英]Implicitly cast a generic type to a non-generic equivalent
給定以下類別:
public abstract class MyRecordClass
{
public int id { get; private set; }
}
public class ExampleMyRecordClass : MyRecordClass {}
public enum SomeIntEnum : int {}
public class MyList<T, E> : IList<T>
where T : MyRecordClass
{
}
public class MyOtherClass
{
public void MyMethod(MyList<T, E> list) {}
}
,我想調用這樣的方法:
MyList<ExampleMyRecordClass, SomeIntEnum> myList;
MyOtherClass myOtherClass;
myOtherClass.MyMethod(myList);
但是,如果傳遞類型為MyList<ExampleMyRecordClass, SomeIntEnum>
的列表,則此方法實際上不起作用,因為隱式上載不適用於泛型類型。 因為我真正想要的只是屬性id
,所以我當然可以在MyList<T, E>
中顯式實現屬性或方法,該屬性或方法返回帶有此信息的新集合。
我更願意做的是隱式完成此操作。 是否有辦法(可能是隱式運算符,或者是要在MyList<T, E>
實現的其他接口)使之成為可能?
我不確定您要尋找的是什么,但是如果進行以下更改,它將編譯並正常運行:
public class MyOtherClass
{
public void MyMethod<T, E>(MyList<T, E> list) where T : MyRecordClass { }
}
您是否正在尋找協方差 ?
public class MyList<T, E> : IList<T>, IReadOnlyList<T>
where T : MyRecordClass
{
}
public class MyOtherClass
{
public void MyMethod(IReadOnlyList<MyRecordClass> list) { }
}
用法:
MyList<ExampleMyRecordClass, SomeIntEnum> myList;
MyOtherClass myOtherClass;
myOtherClass.MyMethod(myList);
public interface IReadOnlyList<out T> : IEnumerable<T>
{
int Count { get; }
T this[int index] { get; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.