【发布时间】:2020-04-07 11:16:30
【问题描述】:
我正在为第 3 方数据库创建接口。我在 C# 中遇到了基本的类问题。在这种情况下,我无法获得通用类工作。
我有这样的代码:
class Program
{
static void Main(string[] args)
{
Collection collection= new Collection();
collection.Save();
}
}
public class Collection : CollectionBase
{
public DataTable<ItemA> itemA = new DataTable<ItemA>();
public DataTable<ItemB> itemB = new DataTable<ItemB>();
}
public class CollectionBase
{
public void Save()
{
var MyFields = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
foreach (var Field in MyFields)
{
if (Field.FieldType.IsGenericType && Field.FieldType.GetGenericTypeDefinition() == typeof(DataTable<>))
{
var ItemInstance = Field.GetValue(this);
//ItemInstance.SaveAll(); //<--This is Missing
var Item = ItemInstance as DataTable<BaseItem>; //<-- Returns null, debuger says this is DataTable<ItemA> (or ItemB at second loop)
Item.SaveAll(); //<--(And fails for null exception, of cource)
}
}
}
}
public class DataTable<T>
{
public IQueryable<T> Where(Expression<Func<T, bool>> condition)
{
//...
return null;
}
public void SaveAll() { }
}
public class BaseItem
{}
public class ItemA : BaseItem
{}
public class ItemB : BaseItem
{}
Field.GetValue(this) 返回正确的实例,但我找不到调用 DataTable 的 SaveAll 函数的方法。
这可能吗?
我知道我可以通过将自己的 Save 函数(本例)添加到 Collection 类来解决这个问题,但我真的不想这样编写代码。
【问题讨论】:
标签: c# type-conversion