[英]using reflection to get properties of class inheriting an interface
我有以下场景,我想获得实现接口的类的属性,但不包括那些虚拟的属性。 为了说清楚,我将给你一个小例子: -
想象一下,我们有以下界面: -
public interface IUser
{
int UserID { get; set; }
string FirstName { get; set; }
}
实现此接口的类: -
public class User: IUser
{
public int UserID { get; set; }
public string FirstName { get; set; }
public virtual int GUID { get; set; }
}
现在,我想要做的是获取除了虚拟的类的属性。 当类没有实现接口时,以下工作正常: -
var entityProperties = typeof(User).GetProperties()
.Where(p => p.GetMethod.IsVirtual == false);
但是,当实现接口时,上面的代码行不会返回任何结果。 如果我删除'where'它工作正常(但虚拟属性不会被排除),如下所示:
var entityProperties = typeof(User).GetProperties();
有人有任何想法吗? 我搜索但是我无法找到任何结果。 在此先感谢您的帮助。
我怀疑你想要IsFinal
:
要确定方法是否可覆盖,仅检查IsVirtual是否为true是不够的。 对于可覆盖的方法,IsVirtual必须为true且IsFinal必须为false。 例如,方法可能是非虚拟的,但它实现了一个接口方法。
所以:
var entityProperties = typeof(User).GetProperties()
.Where(p => p.GetMethod.IsFinal);
或者可能:
var entityProperties = typeof(User).GetProperties()
.Where(p => !p.GetMethod.IsVirtual ||
p.GetMethod.IsFinal);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.