我有一个带有泛型的抽象基类,我将针对这个问题简化它:
public abstract class DBBaseTable<T>
{
public T Id { get; set; }
public byte[] RowVersion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以有这样的课程:Person : DBBaseTable<int>或Animal: DBBaseTable<Guid>
我试图避免反射,以便在我根本不知道T类型的代码的一部分中访问属性 RowVersion 。
var memberInfo = oldObject.GetType().BaseType;
if (memberInfo != null
&& memberInfo.IsGenericType
&& memberInfo.GetGenericTypeDefinition() == typeof(DBBaseTable<>)
)
{
var isCorrectRowVersion = (oldObject as DBBaseTable<object>).RowVersion ==
(objToUpdate as DBBaseTable<object>).RowVersion;
//TODO....
}
Run Code Online (Sandbox Code Playgroud)
条件 IF 条件工作正常......但是当我尝试使用as运算符时,我总是需要指定T类型......我尝试使用“对象”但它不起作用......我根本不知道我是在处理 int、guid 还是其他类型的......
我知道如何通过反射解决这个问题,但我想知道是否有替代方案?
Sea*_*ean 12
将 移动RowVersion到基类中。
public abstract DBBaseTable
{
public byte[] RowVersion { get; set; }
}
public abstract class DBBaseTable<T> : DBBaseTable
{
public T Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |