[英]How can I add child object to the parent generic type in c#
在 java 中,我可以使用泛型類型中的 extends 關鍵字來做到這一點,但在 C# 中我無法弄清楚。
我有 3 個類,其中之一是基類。
public class BaseEntity {
public string Id {get;set;}
}
public class EntityA : BaseEntity {}
public class EntityB: BaseEntity {}
然后我有一個數據集的模擬類。 對於泛型類型,最小約束是BaseEntity
public class MockDataStore<T> : IDataStore<T> where T : BaseEntity
{
List<T> items = new List<T>();
public async Task<bool> AddAsync(T item)
{
}
public async Task<bool> UpdateAsync(T item)
{
}
public async Task<bool> DeleteAsync(T item)
{
}
}
但是當我想將其中一個子類添加到items
列表時,編譯器說這是不可能的。
無法從 EntityA 轉換為 T
items.Add(new EntityA());
由於添加、更新和刪除方法,我想使用泛型類型。
是的,如果我使用List<BaseEntity> = new List<BaseEntity>()
那么我將不會收到無法轉換的消息。 但在這種情況下,添加、更新和刪除方法將是錯誤的。
但是我添加了where T : BaseEntity
這個約束和 grr。
我想要實現的是T : BaseEntity
類型的items
列表填滿了BaseEntity
的子項目。
我該怎么做?
我認為您在這里有兩個選擇:
我認為您在課堂級別不需要泛型。 您可以只擁有一個基類列表並使用它:
public class MockDataStore
{
List<BaseEntity> items = new List<BaseEntity>();
public async Task<bool> AddAsync(BaseEntity item)
{
}
public async Task<bool> UpdateAsync(BaseEntity item)
{
}
public async Task<bool> DeleteAsync(BaseEntity item)
{
}
}
這可能不是你想要的,因為你最終會得到多個類,但我會把它留在這里以防萬一:
public abstract class MockDataStoreBase<T> : IDataStore<T> where T : BaseEntity
{
protected List<T> items = new List<T>();
public virtual async Task<bool> AddAsync(T item)
{
}
public async Task<bool> UpdateAsync(T item)
{
}
public async Task<bool> DeleteAsync(T item)
{
}
}
public class EntityADataStore : MockDataStoreBase<EntityA>
{
public override async Task<bool> AddAsync(EntityA item)
{
bool result = await base.AddAsync(item);
}
//...
}
現在, EntityADataStore.items
將是List<EntityA>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.