为了将您的数据更改反映到UI,您必须实现INotifyPropertyChanged,好的。如果我在大多数情况下查看示例,文章,教程等,那么setter看起来就像这样:
public string MyProperty
{
//get [...]
set
{
if (_correspondingField == value)
{
return;
}
_correspondingField = value;
OnPropertyChanged("MyProperty");
}
}
到目前为止没有问题,只有在必要时才举起活动,很酷。但是您可以将此代码重写为:
public string MyProperty
{
//get [...]
set
{
if (_correspondingField != value)
{
_correspondingField = value;
OnPropertyChanged("MyProperty");
}
}
}
它应该做同样的事情(?),你只有一个返回的地方,它是更少的代码,它是更少无聊的代码,它更多的点(“只有必要时才行动”vs“如果没有必要的话没有,反之亦然“)。
因此,如果第二个版本的优点与第一个版本相比,为什么我很少看到这种风格?我不认为自己比那些编写框架,发表文章等的人更聪明,因此第二个版本必须有缺点。还是错了?或者我想得太多了?
提前致谢
答案 0 :(得分:3)
我发现第二个例子个人更具可读性。我认为第一个例子变得普遍的原因之一是Resharper将提示使用这种风格(并自动进行转换),理由是它“减少了嵌套”。这是正确的,但在这些简单的情况下,我认为可读性更重要。
归结为意见的根本区别 - 有些程序员认为应该只有一个“返回” - 方法结束时的一个单一退出点。然后有些人认为,如果可能的话,应该始终存在“提前退出”,这可能导致整个方法中的多个“回报”。你喜欢哪个? :)
答案 1 :(得分:1)
我比第一种更经常地看到第二种风格......但无论如何它都无关紧要,行为完全相同。不,我不认为第二种方法有任何缺点。这只是个人偏好的问题,选择你认为最易读的。
答案 2 :(得分:0)
与Thomas Levesque相同。我在代码中使用了第二个,我经常看到它。两种方法都应该执行相同的操作。
答案 3 :(得分:0)
它减少了嵌套。
在你的例子中,它非常清晰,只是一个品味的问题,但是当连续使用时更清晰,正如你在这里看到的那样:
Invert "if" statement to reduce nesting
通常我不在乎我是否在价值相同的情况下得到一个事件,所以我把那部分留下来:
public string MyProperty
{
get { return _correspondingField; }
set { _correspondingField = value; OnPropertyChanged("MyProperty"); }
}