问题描述
设置属性后,此代码允许执行该方法。 它执行与设置属性一样多的时间。 我想知道仅在属性值真正更改的情况下才执行该方法的变体。
public const string MyPropertyPropertyName = "MyProperty";
private bool _myProperty = false;
public bool MyProperty
{
get
{
return _myProperty;
}
set
{
Set(MyPropertyPropertyName,ref _myProperty,value);
DoSomething();
}
}
private void DoSomething()
{
// DO YOUR WORK
}
解决方法
Set
方法应返回一个bool
值,该值指示该属性是否已实际设置:
set
{
if (Set(MyPropertyPropertyName,ref _myProperty,value))
DoSomething();
}
如果它不返回值,则应修改它或使用自己的自定义Set
方法:
protected bool Set<T>(string propertyName,ref T storage,T value)
{
if (Equals(storage,value))
return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
,
如果我正确理解“真正改变”的意思,则可以像这样围绕DoSomehting
通话:
if (value != _myProperty)
{
DoSomething();
}
有关value
关键字的更多信息,请参见here
您可以在设置值之前将其与支持者进行比较。
function Joke(props) {
let content = <div>None of the condition matched!</div>;
if (props.question && props.punchline) {
content = (
<div>
<h3>Question: {props.question}</h3>
<h3>Answer: {props.punchline}</h3>
<hr />
</div>
)
} else if (props.punchline) {
content = (
<div>
<h3>Answer: {props.punchline}</h3>
<hr />
</div>
)
}
return content;
}
如果需要该属性的新值,则可能将值传递给DoSomething。
上面的代码使运行dosomething之前的比较清楚。 除非您定期从每个或大多数设置者那里调用方法,否则我不会非常热衷于在特殊情况下更改标准方法签名。