c# - 使用反射返回所有对象属性(包括私有(private)属性)

标签 c#

<分区>

我在 stackoverflow 以及其他网站(包括 MS 文档)上查找了这个,并尝试了我遇到的所有可能的答案,但无济于事。不确定,我做错了什么。简单类,试图获取所有属性,包括私有(private)属性。

解决方案是 vs2017 15.5.7、c# 2017、netFramework 4.7.02 中的控制台应用

尝试了所有的绑定(bind)标志组合:

 (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;
    }
}

最佳答案

我猜你想要属性 字段,GetProperties 不返回私有(private)支持字段 _nameGetFields 确实如此。您可以连接字段和属性,它们都是 MemberInfo:

Type t = typeof(Test);
BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;

MemberInfo[] allMembers = t.GetProperties(bindingFlags).Cast<MemberInfo>()
    .Concat(t.GetFields(bindingFlags))
    .ToArray();

关于c# - 使用反射返回所有对象属性(包括私有(private)属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49196149/

相关文章:

c# - 如何使用 .NET 拆分一个字符串并包含分隔符?

c# - 使用 RazorLight 时如何在循环中包含另一个 Razor 模板?

c# - 具有异步操作的 ASP.NET MVC

c# - 如何更改 Visual Studio Code 中的默认构建输出目录

c# - 如何通过反射到达属性后面的“对象”?

javascript - 将 JavaScript 变量传递给 jQuery DataTable 中的 razor 函数

c# - c# 中的非自动阻塞 MessageBoxes

c# - 从 C# 执行 F# 源代码

c# - 使用 Entity Framework 将 SQL Server 数据库中的表拉入 C# 中的 List<>

c# - 将数据集放入工作表的最快方法