在以下情况下,我想获取实现接口的类的属性,但是不包括虚拟属性。为了清楚起见,我将举一个小例子:
假设我们有以下界面:
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是否为真是不够的。若要使方法可重写,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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句