- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始使用 FxCop 来查看我的代码在违反其整套规则方面的表现有多糟糕。我从“违反”规则开始,我遇到的第一个规则是 CA2227,它基本上说您应该将集合属性的 setter 设置为只读,这样您就不会意外更改集合数据。
自从我使用 MVVM 以来,我发现使用具有获取/设置属性的 ObservableCollection 非常方便,因为它使我的 GUI 更新在代码隐藏中变得简单和简洁。不过,我也能看出 FxCop 在提示什么。
我刚刚遇到的另一种情况是使用 WF,我需要在创建工作流时设置参数,而且我不想不得不围绕我正在使用的集合编写一个包装类来避免这种特殊情况错误信息。
例如,这是我将属性设置为只读时收到的示例运行时错误消息:
The activity 'MyWorkflow' has no public writable property named 'MyCollectionOfStuff'
您对此有何看法?我可以忽略这个特定错误,但这可能不太好,因为我可以想象在 MVVM 不适用的代码中的其他地方违反此规则(例如,仅模型代码)。我认为我也可以将它从一个属性更改为一个类,该类具有操作底层集合的方法,然后从 setter 方法发出必要的通知。我有点困惑...任何人都可以对此有所了解吗?
最佳答案
此特定规则说明集合属性应设为只读,因为您不需要将整个集合分配给属性。
例如,想象一个这样的类:
public class Foo
{
public ObservableCollection<int> Bar { get; set; }
}
如果我在代码中的某处有以下行会发生什么:
var f = new Foo();
f.Bar = new ObservableCollection<int>();
f.Bar.AddRange(new int[] { 1, 2, 3, 4 });
// ...
// Attaches and handlers to the collection events
// ...
f.Bar = new ObservableCollection<int>();
f.Bar.AddRange(new int[] { 5, 6, 7, 8 });
当执行最后两行代码时,不会触发附加的事件处理程序,因为 Bar 属性有一个完全不同的对象。
另一方面,如果该属性是只读的,则会触发事件并且一切都会按预期运行。
关于c# - FxCop 讨厌我对 MVVM 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2539554/
我看到过关于此的类似帖子,但无法让 Netbeans 在正常工作时停止在我的代码中显示错误消息 "Unable to resolve identifier nullptr"。我已正确启用 C++11,
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个 cucumber 步骤,最近开始失败时 已添加到我的布局中。如果我拿 出来,我的测试都通过了。当我把它放回去时,使用 WebRat 提供的 click_link 方法
我一直致力于创建独立于 .Net 客户端运行的 WCF 服务。感谢 Google 和 StackOverflow,我已经能够创建简单的 xml 和 json 服务,而无需 Soap 包装器和一堆我不需
有人可以向我解释一下 python 在 ubuntu 9.04 中发生了什么吗? 我正在尝试启动 virtualenv,而 --no-site-packages 标志似乎对 ubuntu 没有任何作用
我是一名优秀的程序员,十分优秀!