想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。
我有许多属性分布在许多类中。这些属性的值需要根据许多条件进行分配(每个属性大约有5到8个值)。我正在为众多的“如果”条件寻找一个替代方案。
我很晚才遇到“规则引擎”,但AFAIK可以用来验证规则。
任何设计建议都会有很大帮助。
我不确定这对你来说是不是一个“更好”的解决方案,但我会试着解释一下。
需要根据许多条件(每个属性大约5到8个)为这些属性分配值。
我想你的意思是你总是需要写这个,这很烦人:
if (condition1 && condition2 && condition3 && condition4 && condition5) {
Property1 = Value1;
}
if (condition1 && condition2 && condition3 && condition4 && condition5) {
Property2 = Value2;
}
// ...
我想也许这个方法可以解决你的问题?
public static void SetValueForPropertyIf<T>(Predicate<object>[] conditions, ref T property, T value) {
foreach (var predicate in conditions) {
if (!predicate(null)) {
return;
}
}
property = value;
}
您可以使用lambda表达式列表调用该方法,忽略参数(因为它总是空的),一个要通过引用传递的变量,以及一个要在满足所有条件时设置的值。
但是,这仅适用于变量,因为我很确定属性不能通过引用(使用 ref
关键字)传递。所以你必须像这样声明你的属性:
private int someVariable;
public int SomeVariable {
get {return someVariable;}
set {someVariable = value;}
}
如果您不喜欢不使用Predicate
委托的参数,请定义您自己的委托!
public delegate bool MyDelegate();
这里有一个如何使用这种方法的例子,以防你不明白我的意思。
class MyClass {
private int someVariable;
public int SomeVariable {
get {return someVariable;}
set {someVariable = value;}
}
public MyClass() {
someVariable = 10;
MyDelegate[] conditions = {
(() => 7 < 10),
(() => 77 == 77),
(() => "Sweeper is awesome".Contains("Sweeper")),
(() => String.IsNullOrEmpty(""))
};
SetValueForPropertyIf(conditions, ref someVariable, 20);
}
}
在此类的构造函数中,我首先创建了一些条件,这些条件都是正确的。然后,我使用这些条件调用该方法。请注意,我使用 someVariable
(字段)而不是 SomeVariable
(属性)作为 ref
参数。
然后您可以打印SomeVariable
:
MyClass mc = new MyClass();
Console.WriteLine(mc.SomeVariable);
输出是20。万岁!
问题内容: 我不确定如何在没有链接分配的情况下执行此操作(由于我要设置副本,因此这可能无法正常工作)。 我不想采用多索引熊猫数据框的子集,测试小于零的值并将其设置为零。 例如: 给 这表明它无法根据条件进行设置。或者,如果我进行了链接分配: 这给出了相同的结果(以及带有复制警告的设置) 我可以根据第一级是我想要的条件来遍历每一列: 这给出了预期的结果: 但是以某种方式,我觉得有比遍历各列更好的方法
使用斜扣。ASP中的AspNetCore。NET Core webapp,我们有如下响应类型: 使用Swashback发出swagger API JSON时,这将变成: 这里的问题是,DateTime是一种值类型,不能为null;但是发出的Swagger API JSON没有将这两个属性标记为必需的。这种行为对于所有其他值类型都是一样的:int、long、byte等,它们都被认为是可选的。 为了完
我有一个熊猫数据框。如果以前的值x小于50,而当前值大于50,我想为新列y添加一个值为1的新列。 我得到这个错误: 代码:
问题 在你解析一个Document之后可能想修改其中的某些属性值,然后再保存到磁盘或都输出到前台页面。 方法 可以使用属性设置方法Element.attr(String key, String value), 和Elements.attr(String key, String value). 假如你需要修改一个元素的class 属性,可以使用Element.addClass(String clas
3.1 构件属性值的设置 Tkinter 构件对象有很多属性,这些属性的值可以在创建实例时用关键字参数指定(未 指定值的属性都有缺省值): <构件类>(<父构件>,<属性>=<值>,...) 也可以在创建对象之后的任何时候通过调用对象的 configure(或简写为 config)方法来更改 属性值: <构件实例>.config(<属性>=<值>,...) 构件类还实现了一个字典接口,可使用下