我有以下场景,我想获得实现接口的类的属性,但不包括那些虚拟的属性.为了说清楚,我将给你一个小例子: –
想象一下,我们有以下界面: –
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
:
To determine if a method is overridable,it is not sufficient to check that IsVirtual is true. For a method to be overridable,IsVirtual must be true and IsFinal must be false. For example,a method might be non-virtual,but it implements an interface method.
所以:
var entityProperties = typeof(User).GetProperties() .Where(p => p.getmethod.IsFinal);
或者可能:
var entityProperties = typeof(User).GetProperties() .Where(p => !p.getmethod.IsVirtual || p.getmethod.IsFinal);