- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想保存某些类,因为在我的情况下 xml 序列化不会这样做,所以我将这些值手动保存到 xml 文档中。工作正常,但 FxCop 不喜欢它,因为 FxCop 通常会给出很好的建议和我不应该以某种方式做事的原因,我试图让它开心。
这一次,我不明白这是怎么改进的。
这是我的:
public void Save()
{
XmlDocument doc = new XmlDocument();
XmlNode XmlNodeJob = doc.CreateElement("Job");
doc.AppendChild(XmlNodeJob);
OtherclassSave2(XmlNodeJob);//Node as Parameter
}
public void OtherclassSave2(XmlNode node)
{
}
这就是 FxCop 提示的内容:“修改成员‘OtherclassSave2(XmlNode)’,使其不再公开具体类型‘XmlNode’。使用 IXPathNavigable 表示 XML 数据源。”
现在我很棒的解决方案:
public void Save()
{
XmlDocument doc = new XmlDocument();
XmlNode XmlNodeJob = doc.CreateElement("Job");
doc.AppendChild(XmlNodeJob);
OtherclassSave2(XmlNodeJob.CreateNavigator());//Interface from a node's navigator
}
public void OtherclassSave2(IXPathNavigable nav)
{
XmlNode node = (XmlNode)(nav.CreateNavigator().UnderlyingObject);
}
这样我就可以用另一种方法获取我的节点,FxCop 很高兴,但我真的看不到任何改进,我需要一个节点来向其中添加内容,而不是要读取的内容。
虽然我想将 void SaveInThisNode(XmlNode) 更改为 XmlNode GetMeTheNode() 但是要通过 CreateElements 创建节点,我需要我不允许的 XmlDocument 对象用作参数,但我可以在每个步骤中创建新的 XmlDocuments,很好。
我的解决方案很简单,可以很好地满足我希望它做的所有事情,但 FxCop 似乎不允许解决方案没有明显更糟和更复杂。
最佳答案
FxCop 说您应该使用接口(interface)而不是接口(interface)的具体实现。它可能在您的 OtherclassSave2
中检测到方法参数nav
可以用作 IXPathNavigable
未指定具体实现(仅使用 IXPathNavigable
公开的成员)。
作为XmlNode
工具 IXPathNavigable
,你应该能够写:
public void Save()
{
XmlDocument doc = new XmlDocument();
XmlNode XmlNodeJob = doc.CreateElement("Job");
doc.AppendChild(XmlNodeJob);
OtherclassSave2(XmlNodeJob);
}
public void OtherclassSave2(IXPathNavigable node)
{
// Deal with node using the interface only
}
为了澄清为什么 FxCop 这么说,下面是 FxCop 检测到的问题的最常见示例:
假设你有:
public int Sum(List<int> parameter)
{
int tmp = 0;
foreach (int i in parameter)
{
tmp += i;
}
return i;
}
List<int> lst = new List<int> {3, 4, 5};
int sum = Sum(lst);
作为Sum
实现不使用 List<T>
的特定方法类型,将参数类型设置为 List<int>
不是一个好主意因为它会限制你的 Sum
的使用方法。作为Sum
实现只使用 foreach
,最好这样写:
public int Sum(IEnumerable<int> parameter)
{
int tmp = 0;
foreach (int i in parameter)
{
tmp += i;
}
return i;
}
所以你可以调用Sum
与其他类型 List<T>
: ObservableCollection<T>
...等
关于c# - FxCop 投诉 : Exposed concrete xml types and a bad improvement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9190621/
我们的电脑在使用的过程中,有的小伙伴在上网的时候可能就遇到过系统提示:400 bad request的情况。据小编所知这种情况,大致意思就是出现了错误的请求或者请求不能满足。原因是因为我们请求的语法
您可以尝试清除浏览器缓存 访问一下你的FTP看是否可以登陆 成功解决502 Bad Gateway错误 今天登陆博客,显示502 bad gateway,NGINX最烦人的地方就是经常会出现这个
我想要具有 FIFO 的服务器-客户端模型和客户端获取目录路径,但我收到错误“读:错误地址”和“写:错误地址”。 客户端 服务器错误:“读取:地址错误” 客户端错误:“写入:地址错误” 最佳答案 您可
Agda 手册 Inductive Data Types and Pattern Matching状态: To ensure normalisation, inductive occurrences
我正在使用 maven-compiler-plugin:2.3.2 并且每次我对在导入中具有枚举 (ContentType) 的类进行更改时,我需要使 干净,否则它会给我: ERROR] Failed
我想发布我的第一个 Facebook 应用程序,需要一个隐私政策 URL。 我在我的网站上发布了 privacypolicy.html 页面,但是当我在“应用程序详细信息”中配置它时,我收到了下一条消
vscode 1.45.1版本使用克隆存储库时,我收到“Bad credentials”。最近我在github上换了用户名。可能就是这个原因。我如何告诉vs code?
我正在 Mac OS 终端上创建 cron,代码如下: home.cron 的内容: * * * * * /users/username/desktop/forTrump/script.sh 然后我这
我是新手,所以需要任何帮助,当我要求一个例子时,我的教授给我了这段代码,我希望有一个工作模型...... from numpy import loadtxt import numpy as np fr
我使用 linux 服务器已经有一段时间了,通过使用 cifs 挂载到多个 Windows 共享。 到目前为止,我总是在/etc/fstab 中有一行://IPADDRESS/sharename/mn
请大家帮帮我我正在尝试使用 NUTCH 抓取网站,但它给我错误“java.io.IOException: Job failed!” 我正在运行此命令“bin/nutch solrindex http:
我想创建我的基础业务类,例如 EntityBase,以具有一些常见的行为,例如实现用于跟踪对象更改的接口(interface)(IsNew、IsDirty)和 INotifyPropertyChang
我们最近开发了一个基于 SOA 的站点,但是这个站点在负载过重时最终会出现严重的负载和性能问题。我在这里发布了一个与此问题相关的问题: ASP.NET website becomes unrespon
我们的 Azure 功能已开始返回 502 Bad Gateways,但并非所有调用都返回。我没有使用“间歇性”这个词,因为它总是进行相同类型的调用,但现在总是使用相同的数据。 常规配置 Azure
我假设在字典中进行查找时,它需要散列您提供的 key ,然后使用该散列来查找您要查找的对象。 如果是这样,使用较大的对象作为键是否会显着减慢查找速度或产生其他使用字符串或简单数据类型作为键不会遇到的后
我的代码如下: public static final Condition.ActionCondition ACTION_CONDITION_ACTIVATE = new Condit
大家好,我有一个应用程序和一个表单,我要求用户在其中输入地址,并在文本字段下方显示带有标记的谷歌地图,用户可以在其中将标记拖/放到正确的位置。问题是,在显示 map 的开始时,它只是部分显示而不是全部
给定字节矩阵(所有值在内存中都是 1 位),如果其中至少有一个零,则称其为原始列或“坏”列。查找算法,占用 O(1) 额外内存。 如果没有另一个值(如 -1)或另一个重复矩阵来跟踪已经找到的空值,并且
当我创建一个标准类时,我主要这样做: $test = null; $test->id = 1; $test->name = 'name'; 但是在严格模式下我得到一个错误。 显然正确的做法是: $te
我试图理解为什么将 -O2 -march=native 与 GCC 一起使用会比不使用它们时产生更慢的代码。请注意,我在 Windows 7 下使用 MinGW (GCC 4.7.1)。 这是我的代码
我是一名优秀的程序员,十分优秀!