我希望同时设置属性列表,是否可能? 谢谢!
public class Helper
{
public bool A { get; set; }
public bool B { get; set; }
public bool C { get; set; }
public void SetToFalse(List<Property> ABC)
{
// try to set A, B, C to false in a for loop
foreach (var item in ABC)
{
item = false;
}
}
}
为什么我要这样做:我希望有一个干净的方法来同时切换布尔属性,而我无法将属性分组到列表中,因为上下文是ViewModel,属性绑定到Xaml。
答案 0 :(得分:1)
我会使用rambda列表。
public class Helper
{
public bool A { get; set; }
public bool B { get; set; }
public bool C { get; set; }
public List<Action<bool>> Setters { get; set; }
public Helper()
{
this.Setters = new List<Action<bool>>()
{ b => this.A = b, b => this.B = b, b => this.C = b };
}
public void SetToFalse(IEnumerable<Action<bool>> setters)
{
// try to set A, B, C to false in a for loop
foreach (var a in setters)
{
a(false);
}
}
}
你喜欢这个吗?
答案 1 :(得分:0)
这个应该有效。
Helper helper = new Helper();
//This will get all Boolean properties of your class
var properties = helper.GetType().GetProperties().Where(e=>e.PropertyType==typeof(Boolean));
//Completing all Boolean properties with "false"
foreach (var propertyInfo in properties)
{
propertyInfo.SetValue(helper,false);
}
注意 - 在运行时使用反射是一个不好的举动(性能会下降)
答案 2 :(得分:0)
如果你需要支持那么多布尔标志,我会把它改成一个字典并做这样的事情:
class Class1
{
private Dictionary<String, Boolean> boolenVars = new Dictionary<String, Boolean>();
public Boolean getFlag(String key)
{
if (this.boolenVars.ContainsKey(key))
return this.boolenVars[key];
else
return false;
}
public void setFlag(String key, Boolean value)
{
if (this.boolenVars.ContainsKey(key))
this.boolenVars[key] = value;
else
this.boolenVars.Add(key, value);
}
public void clearFlags()
{
this.boolenVars.Clear();
}
}
您可以为此目的创建一个枚举,而不是使用基于字符串的键,以确保在使用标志时没有拼写错误。
即使您决定添加7526个新的布尔标志,此解决方案也不需要进一步更改代码。
此解决方案还提供 - 如果使用公共getter或方法公开字典 - 所有“set”布尔标志的列表。
答案 3 :(得分:-1)
您可以使用对象初始值设定项来执行此操作。 VS将为您提供属性的智能感知。
http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx
示例:
class Helper
{
public bool A { get;set;}
public bool B { get;set;}
}
Helper myclass = new Helper { A = false, B = false };
这不是使用for循环,但在我看来它更清晰。