C# 数据的反映

C# 数据的反映,c#,reflection,private-methods,C#,Reflection,Private Methods,如何读取并返回任何对象及其私有字段 public class Person { private string _password; } public string Name { get; set } public Gender man { get; set } public int Age { get; set } } 这里是您必须从中获取数据的类首先获取对象类型,然后获取其具有给定名称的非公共实例字段。 然后可以从对象中获取值。例如: pub

如何读取并返回任何对象及其私有字段

public class Person
{
    private string _password;


    }

    public string Name { get; set }

    public Gender man { get; set }

    public int Age { get; set }
}

这里是您必须从中获取数据的类

首先获取对象
类型
,然后获取其具有给定名称的非公共实例字段。 然后可以从对象中获取值。例如:

public static string ReadPrivateField<T>(T obj, string fieldName)
{
    var type = typeof(T);
    var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
    var value = field.GetValue(obj);
    return value as string;
}
公共静态字符串ReadPrivateField(T obj,字符串字段名)
{
var类型=类型(T);
var field=type.GetField(fieldName,BindingFlags.NonPublic | BindingFlags.Instance);
var值=字段。获取值(obj);
以字符串形式返回值;
}

首先获取对象
类型
,然后获取具有给定名称的非公共实例字段。 然后可以从对象中获取值。例如:

public static string ReadPrivateField<T>(T obj, string fieldName)
{
    var type = typeof(T);
    var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
    var value = field.GetValue(obj);
    return value as string;
}
公共静态字符串ReadPrivateField(T obj,字符串字段名)
{
var类型=类型(T);
var field=type.GetField(fieldName,BindingFlags.NonPublic | BindingFlags.Instance);
var值=字段。获取值(obj);
以字符串形式返回值;
}

这很简单。如果有这样的实例,则需要使用
typeof
GetType()
获取目标对象的类型。然后可以使用
GetField
获取所需字段。但有一个陷阱
GetField
默认情况下仅搜索公共和非静态字段。要更改,您需要给它一些
BindingFlags
。例如:

publicstaticstringreadprivateField(objectobj,stringfieldname)
{
var type=obj.GetType();
//NonPublic=obly搜索私有字段。
//实例=仅搜索非静态字段。
var field=type.GetField(fieldName,BindingFlags.NonPublic | BindingFlags.Instance);
返回字段.GetValue(obj)作为字符串;
}

这很简单。如果有这样的实例,则需要使用
typeof
GetType()
获取目标对象的类型。然后可以使用
GetField
获取所需字段。但有一个陷阱
GetField
默认情况下仅搜索公共和非静态字段。要更改,您需要给它一些
BindingFlags
。例如:

publicstaticstringreadprivateField(objectobj,stringfieldname)
{
var type=obj.GetType();
//NonPublic=obly搜索私有字段。
//实例=仅搜索非静态字段。
var field=type.GetField(fieldName,BindingFlags.NonPublic | BindingFlags.Instance);
返回字段.GetValue(obj)作为字符串;
}

你需要在
ReadPrivateField
我猜:)如果你问你是否可以将支持字段添加到属性中,你只能使用自动实现的属性,否则它可能是任何东西,即使这样,我想这也可能是偶然的,我该怎么做?查看更新。
BindingFlags.NonPublic | BindingFlags.Static
——这是在寻找一个静态字段,但您的
\u password
字段是一个实例字段。您需要在
ReadPrivateField
中放入内容(我猜:)如果您询问是否可以将支持字段获取到属性,你只能用一个自动实现的属性来实现它,否则它可能是任何东西,即使这样,这也可能是命中或未命中的im thinkingOkay,我该怎么做?查找更新。
BindingFlags.NonPublic | BindingFlags.Static
——这是在查找静态字段,但您的
\u密码
字段是一个实例字段。