gpt4 book ai didi

c# - 用反射清理我的代码

转载 作者:行者123 更新时间:2023-11-30 22:37:42 27 4
gpt4 key购买 nike

我想用反射遍历我的 Car 类以删除所有空值并用更好的值替换它们,例如 string = ""。

    [Serializable()]
public class Car
{
public string model;
public int year;
public List<Owner> owner;
}

[Serializable()]
public class Owner
{
public string firstName;
public string lastName;
}

到目前为止我已经做到了

   public void LoopEverythingAndFix(object type)
{
var prop = type.GetType().GetFields();

foreach (var fieldInfo in prop)
{
if (GetType(fieldInfo))
{
var value = fieldInfo.GetValue(type);

if (value == null)
fieldInfo.SetValue(type, GetDefaultValue(fieldInfo));
}
else
{
LoopEverythingAndFix(fieldInfo);
}
}
}
public bool GetType(System.Reflection.FieldInfo fieldInfo)
{
if (fieldInfo.FieldType == typeof(string))
return true;

if (fieldInfo.FieldType == typeof(bool))
return true;

if (fieldInfo.FieldType == typeof(int))
return true;

if (fieldInfo.FieldType == typeof(decimal))
return true;

return false;
}

GetType 方法是判断当前字段是否是像“owner”类这样的类,或者它是否是像 int/string 这样的值/引用字段,以及它是否是“owner”类型然后我想将其循环并修复这些属性。

问题是当它在 car 类中找到“所有者”并去执行时:

 LoopEverythingAndFix(fieldInfo);

这就是问题所在,因为我将 fieldInfo 发送到方法 LoopEverythingAndFix 并且当它返回循环时它在 type.GetType 处获得 0 个字段().GetFields()。这是一个列表,我想循环列表项并将它们发送到 LoopEverythingAndFix 方法

最佳答案

您尝试在反射类型 FieldInfo 上调用 LoopEverythingAndFix 而不是您要修复的实际对象。

要修复,请替换为:

LoopEverythingAndFix(fieldInfo);

有了这个:

LoopEverythingAndFix(fieldInfo.GetValue(type));

关于c# - 用反射清理我的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com