Dom*_*ton 5 c# reflection interface
我有以下接口和实现:
public interface INew
{
string TestString { get; }
}
public class PurchaseOrder : INew
{
public string OrderNo { get; set; }
public string TestString
{
get { return "This is a test string"; }
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下代码反映对象的OrderNo一部分PurchaseOrder:
var props = p.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.FlattenHierarchy);
foreach (var prop in props)
{
Console.WriteLine(prop.Name);
}
Run Code Online (Sandbox Code Playgroud)
我的输出也返回了该TestString属性。我已经搜索了排除已实现的接口成员的方法,但只能找到包含它的项目。谁能告诉我如何排除这些项目?
这是使用 GetInterfaceMap 方法的解决方案:
var interfaceMethods = typeof(PurchaseOrder)
.GetInterfaces()
.Select(x => typeof(PurchaseOrder).GetInterfaceMap(x))
.SelectMany(x => x.TargetMethods).ToArray();
var propsNotFromInterface= typeof(PurchaseOrder)
.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.FlattenHierarchy)
.Where(x => !x.GetAccessors(true).Any(y => interfaceMethods.Contains(y))).ToArray();
Console.WriteLine(propsNotFromInterface.Length);
Run Code Online (Sandbox Code Playgroud)
您可以非常轻松地将其重构为通用方法。
| 归档时间: |
|
| 查看次数: |
833 次 |
| 最近记录: |