为了账号安全,请及时绑定邮箱和手机立即绑定

更改对象中每个字符串属性的值

更改对象中每个字符串属性的值

C#
LEATH 2022-06-12 10:34:55
我有一个包含许多子对象的对象,每个子对象都有不同数量的字符串属性。我想编写一个方法,允许我输入一个父对象,该对象将遍历每个子对象中的每个字符串属性,并从属性内容中修剪空白。对于可视化:public class Parent{    Child1 child1 { get; set;}    Child2 child2 { get; set;}    Child3 child3 { get; set;}}public class Child1 (Child2 and Child3 classes are similar){    string X { get; set; }    string Y { get; set; }    string Z { get; set; }}我有以下代码,它在父类中创建一个属性列表,然后遍历每个属性并找到字符串的子属性,然后对它们进行操作。但是由于某种原因,这似乎对属性的值没有任何影响。private Parent ReduceWhitespaceAndTrimInstruction(Parent p){    var parentProperties = p.GetType().GetProperties();    foreach(var properties in parentProperties)    {        var stringProperties = p.GetType().GetProperties()            .Where(p => p.PropertyType == typeof(string));        foreach(var stringProperty in stringProperties)        {            string currentValue = (string)stringProperty.GetValue(instruction, null);            stringProperty.SetValue(p, currentValue.ToString().Trim(), null);        }    }    return instruction;}编辑:忘了提。问题似乎来自内部foreach,外部 foreach 查找每个属性,但查找仅是字符串的属性似乎无法正常工作。编辑:更新方法private Parent ReduceAndTrim(Parent parent)        {            var parentProperties = parent.GetType().GetProperties();            foreach (var property in parentProperties)            {                var child = property.GetValue(parent);                var stringProperties = child.GetType().GetProperties()                    .Where(x => x.PropertyType == typeof(string));                foreach (var stringProperty in stringProperties)                {                    string currentValue = (string) stringProperty.GetValue(child, null);                    stringProperty.SetValue(child, currentValue.ToString().Trim(), null);                }            }            return parent;        }
查看完整描述

2 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您的stringProperties枚举不包含任何项目,因为您要求Parent类型为您提供类型的所有属性string- 没有。


var stringProperties = p.GetType().GetProperties()

    .Where(p => p.PropertyType == typeof(string));

注意p是类型Parent,所以p.GetType()产量typeof(Parent)。


您需要获取's 实例Child的每个属性值(每个实例) :Parent


var parentProperties = p.GetType().GetProperties();


foreach (var property in parentProperties)

{    

    var child = property.GetValue(p);

    var stringProperties = child.GetType().GetProperties()

        .Where(p => p.PropertyType == typeof(string));


    // etc

}


查看完整回答
反对 回复 2022-06-12
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

GetProperties 方法仅返回您的类型的公共属性。如果您将 Parent 类的属性更改为以下内容,您应该能够继续前进:


public class Parent

{

    public Child1 Child1 { get; set; }

    public Child2 Child2 { get; set; }

    public Child3 Child3 { get; set; }

}

但是这行代码仍然会返回 null,因为您的子类中没有“父”属性:


var child = property.GetValue(parent);

我希望它有所帮助:D


查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信