如何将具有公共变量的列表对象的所有项目一次设置为相同的值?

时间:2015-05-03 23:42:18

标签: c#

我有一个我创建的类(.cs文件)列表,我只想将此类中的所有公共变量设置为相同的false或true值,具体取决于另一个变量。

有一种简单的方法可以做到这一点,还是我必须遍历List中的每个对象?

3 个答案:

答案 0 :(得分:1)

以下是你可以做到这一点的一种方法......在你的课堂上,设定一个方法来设置你想要的任何值:

public class SomeClass
{
    public bool Prop1 { get; set; }
    public bool Prop2 { get; set; } 
    public bool Prop3 { get; set; } 
    public bool Prop4 { get; set; }

    public void SetAllProps(bool theValue)
    {
        Prop1 = theValue;
        Prop2 = theValue;
        Prop3 = theValue;
        Prop4 = theValue;
    }
}

然后使用List这样:

List<SomeClass> listOfClasses = new List<SomeClass>();

您可以设置所有值,如:

listOfClasses.ForEach(x => x.SetAllProps(true));

答案 1 :(得分:0)

您可以在类中创建一个公共方法,该方法使用相同的值更新每个变量。你可以为列表中的每个项目调用方法。

要更新方法中的所有局部变量,您可以使用像

这样简单的东西

var1 = var2 = var3 = var4 = true;

答案 2 :(得分:0)

使用Reflection

var list = new List<object>() { new TestDataClass(), new TestDataClass() };
foreach (var instance in list) 
    SetObjectProperties(instance, true);
public class TestDataClass
{
    public int A { get; set; }
    public bool B { get; set; } // Only set this property
    public DateTime C { get; set; }
    public bool D { get { return false; } }
    private bool E { get; set; }
}

public void SetObjectProperties<T>(object target, T value)
{
    var propInfos = target.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
    foreach (var propInfo in propInfos.Where(i => i.PropertyType == typeof(T) && i.GetSetMethod() != null))
    {
        propInfo.SetValue(target, value, null);
    }
}