basicEntity.GetType() .GetField(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance).GetValue(basicEntity) 字段名没有错 获取结果为null
时间: 2024-03-29 09:35:03 浏览: 21
如果您使用了`basicEntity.GetType().GetField(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance).GetValue(basicEntity)`代码获取字段值,但结果为`null`,可能有以下几种原因:
1. 字段名错误:请确保您的字段名是正确的,并且区分大小写。可以在调试器中查看实例中的字段名。
2. 字段不是公共的:如果字段是私有的或受保护的,需要使用BindingFlags参数指定反射访问级别。
3. 字段所在的类错误:请确保您正在访问正确的类的字段。
4. 字段类型错误:请确保您正在使用正确的类型来获取字段。
5. 字段值为null:如果字段在对象中的值为`null`,则您无法从该字段获取任何值。
您可以在调试器中查看`basicEntity`对象中的字段,并使用正确的名称和类型获取字段的值。如果您仍然无法解决问题,请提供更多详细信息或代码示例,以便我能够更好地帮助您。
相关问题
fieldsValue.Add(basicEntity.GetType() .GetField(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)字段名没有错 获取结果为null
如果您使用了`basicEntity.GetType().GetField(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)`获取字段,但结果为`null`,可能有以下几种原因:
1. 字段名错误:请确保您的字段名是正确的,并且区分大小写。可以在调试器中查看实例中的字段名。
2. 字段不是公共的:如果字段是私有的或受保护的,需要使用BindingFlags参数指定反射访问级别。
3. 字段所在的类错误:请确保您正在访问正确的类的字段。
4. 字段类型错误:请确保您正在使用正确的类型来获取字段。
您可以在调试器中查看`basicEntity`对象中的字段,并使用正确的名称和类型获取字段的值。如果您仍然无法解决问题,请提供更多详细信息或代码示例,以便我能够更好地帮助您。另外,如果您想要获取对象中所有的字段,您可以使用`Type.GetFields()`方法获取所有公共字段,或使用`Type.GetProperties()`方法获取所有公共属性。
if (keyValuePair.Value.Any()) { var verifySet = new HashSet<string>(); var sameList = new List<string>(); var identity = keyValuePair.Value[0].GetIdentity(); if (!string.IsNullOrEmpty(identity)) { var fields = identity.Split("_"); foreach (var basicEntity in keyValuePair.Value) { List<string> fieldsValue = new(); foreach (var field in fields) { fieldsValue.Add(basicEntity.GetType().GetField(field, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(basicEntity)?.ToString()); } if (verifySet.Contains(identity)) { sameList.Add(identity); } else { verifySet.Add( string.Join("_", fieldsValue)); } } } } 优化这段代码
这段代码可以优化的地方有:
1. 每次循环都要调用 `keyValuePair.Value`,可以在外面先将其赋值给一个变量,以避免重复调用。
2. 在 `if (!string.IsNullOrEmpty(identity))` 判断内部,可以将 `fields` 数组中的元素转换为 `HashSet<string>`,以便更好地进行查找和比较。
3. 在 `foreach (var basicEntity in keyValuePair.Value)` 循环内部,可以将 `fieldsValue` 数组的创建放到外部,在循环内部进行清空和添加,以避免重复创建数组。
优化后的代码如下所示:
```
if (keyValuePair.Value.Any())
{
var verifySet = new HashSet<string>();
var sameList = new List<string>();
var values = keyValuePair.Value;
var identity = values[0].GetIdentity();
if (!string.IsNullOrEmpty(identity))
{
var fields = new HashSet<string>(identity.Split("_"));
var fieldsValue = new List<string>();
foreach (var basicEntity in values)
{
fieldsValue.Clear();
foreach (var field in fields)
{
fieldsValue.Add(basicEntity.GetType().GetField(field, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(basicEntity)?.ToString());
}
var identityValue = string.Join("_", fieldsValue);
if (verifySet.Contains(identityValue))
{
sameList.Add(identity);
}
else
{
verifySet.Add(identityValue);
}
}
}
}
```
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)