想象一下以下内容
T型有一个现场公司.执行以下方法时,它完美地工作:
Type t = typeof(T);
t.GetProperty("Company")
Run Code Online (Sandbox Code Playgroud)
以下调用我得到了null
Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)
Run Code Online (Sandbox Code Playgroud)
有人有个主意吗?
我正在使用Reflection类来获取某个对象中的所有字段.然而,我的问题是,当字段在普通类中时,它可以正常工作,例如:
class test
{
string test1 = string.Empty;
string test2 = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
在这里我得到test1和test2,我的问题是我使用抽象,因此结合了几个类.
我有类似的东西:
class test3 : test2
{
string test4 = string.Empty;
string test5 = string.Empty;
}
class test2 : test1
{
string test2 = string.Empty;
string test3 = string.Empty;
}
class test1
{
string test0 = string.Empty;
string test1 = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我不会从中获取字段GetType().GetFields(BindingFlag.Default).
这些领域的每个人都有get; set;附属于它的财产.当我运行代码时,我将属性一直返回到test1但不是实际的字段.
这是我试图获取字段的代码:
FieldInfo[] fields = Obj.GetType().GetFields(BindingFlags.Default);
foreach (FieldInfo field in fields)
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
FieldInfo[] fields = Obj.GetType().GetFields(BindingFlags.Public
| BindingFlags.Instance
| …Run Code Online (Sandbox Code Playgroud) 我记得在某个地方阅读,当使用反射和重载GetMethod接受一个位掩码BindingFlags,BindingFlags.Default相当于BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance或某事.谁能告诉我具体包含哪些值BindingFlags.Default?在MSDN文档不说,我不能在任何地方找到答案.
我想知道当我使用GetProperties()提取特定类的所有属性时是否可以排除静态属性。我知道为此使用BindingFlags来过滤我需要的属性,但我真正想要的是我要排除静态属性。我尝试使用这样的东西:
typeof(<class>).GetProperties(!BindingFlags.Static);
Run Code Online (Sandbox Code Playgroud)
但我认为它不起作用,因为VS向我抛出了一些语法错误。这是我的类中带有属性的内容。
public class HospitalUploadDtl : Base.Tables
{
public HospitalUploadDtl() { }
public HospitalUploadDtl(SqlDataReader reader)
{
ReadReader(reader);
}
#region Properties
public long BatchDtlId { get; set; }
public long BatchNumber { get; set; }
public string HospitalCode { get; set; }
public string HospitalName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Country { get; set; }
public string ContractPerson { get; set; }
public string ContactNo …Run Code Online (Sandbox Code Playgroud) 我正在使用反射来创建用户将在动态生成的菜单中使用的方法列表(我是统一的).我在用:
MethodInfo[] methodInfos = myObject.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
Run Code Online (Sandbox Code Playgroud)
但并不是所有类的公共方法都应该出现在这个菜单中,所以我想知道,是否有一些标志可以用来标记我需要的方法?
然后使用这个"自定义标志"来通过反射来获取这些方法.谢谢 :).