我在stackoverflow以及包括MS文档在内的其他网站上查看了这个,并尝试了我遇到的所有可能的答案,但无济于事。不确定,我做错了什么。简单的类,试图获得所有属性,包括私有属性。
该解决方案是vs2017 15.5.7中的控制台应用程序,c#2017,netFramework 4.7.02
尝试了所有绑定标志组合:
(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static)
(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static |
BindingFlags.Instance | BindingFlags.DeclaredOnly)
包括代码:
var listnew = new List<Test>
{
new Test {Name = "Test"}
};
foreach (var item in listnew)
{
var test = item.GetType().GetProperties(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static);
foreach (var prop in test)
{
System.Console.WriteLine(prop);
System.Console.WriteLine(prop.GetValue(item));
}
}
这是班级:
public class Test
{
private string _name;
public string Name
{
get => _name;
set => _name = value;
}
}
答案 0 :(得分:6)
我想你想要属性和字段,queue = Queue.new
thread = Thread.new do
queue.push :ready
# background work
end
queue.pop
# other work
不会返回私有支持字段GetProperties
,但_name
会返回。您可以连接字段和属性,两者都是GetFields
:
MemberInfo
答案 1 :(得分:0)
您关注的元数据有两种类型:FieldInfo
描述字段,PropertyInfo
描述属性。
这是一个打印给定实例的完整元数据的方法:
private static void PrintMetadata(Test item)
{
Type type = item.GetType();
FieldInfo[] fields = type.GetFields(BindingFlags.GetField | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
foreach (var field in fields)
{
Console.WriteLine(field.Name + " :: " + field.GetValue(item));
}
PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.GetProperty);
foreach (var property in properties)
{
Console.WriteLine(property.Name + " :: " + property.GetValue(item));
}
}
只需从循环中为每个项目调用它,如下所示:
var listnew = new List<Test>
{
new Test {Name = "Test1"}
};
foreach (var item in listnew)
{
PrintMetadata(item);
}
希望这有帮助。