c#根据字段名字符串获取对象中该字段值
时间: 2023-09-06 12:13:58 浏览: 139
你可以使用反射来实现根据字段名字符串获取对象中该字段的值。
假设你有一个类 `Person`,并且你想要获取该类中的某个字段的值,可以按照以下步骤进行:
1. 使用 `Type.GetType()` 方法获取该类的 `Type` 对象。
2. 使用 `Type.GetProperty()` 方法获取该字段的 `PropertyInfo` 对象。
3. 使用 `PropertyInfo.GetValue()` 方法获取该字段的值。
以下是示例代码:
```csharp
Person person = new Person();
string fieldName = "Name"; // 要获取的字段名
Type type = person.GetType();
PropertyInfo propertyInfo = type.GetProperty(fieldName);
object fieldValue = propertyInfo.GetValue(person);
```
在上面的示例代码中,我们首先创建了一个 `Person` 对象,然后指定要获取的字段名字符串为 `Name`。接下来,我们使用 `GetType()` 方法获取该对象的类型对象,并使用 `GetProperty()` 方法获取该字段的 `PropertyInfo` 对象。最后,我们使用 `GetValue()` 方法获取该字段的值,并将其存储在 `fieldValue` 变量中。
需要注意的是,如果要获取的字段是非公共字段(即 `private`、`protected` 或 `internal`),则需要在 `GetProperty()` 方法中指定 `BindingFlags` 参数,以便获取到该字段。例如,如果要获取一个 `private` 字段,可以使用以下代码:
```csharp
Person person = new Person();
string fieldName = "age"; // 要获取的字段名
Type type = person.GetType();
FieldInfo fieldInfo = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
object fieldValue = fieldInfo.GetValue(person);
```
在上面的示例代码中,我们使用了 `GetField()` 方法来获取非公共字段的 `FieldInfo` 对象,并在 `BindingFlags` 参数中指定了 `NonPublic` 和 `Instance` 标志,以便获取到 `private` 实例字段。
阅读全文