Tag: .net attributes

和 之间有什么区别?

这可能已经被问到了,但很难找到。 [Something]和[SomethingAttribute] [Something]什么区别? 以下两个编译: [DefaultValue(false)] public bool Something { get; set; } [DefaultValueAttribute(false)] public bool SomethingElse { get; set; } 除了外观之外,它们之间是否有任何差异? 它们使用的一般准则是什么?

使用params object 构造函数的属性会产生不一致的编译器错误

我收到了错误 属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式 请注意下面的截图: 请注意,如果我将DataRow属性与一个或三个参数一起使用,则不会出现编译错误。 但是如果我使用两个参数而第二个参数是一个字符串数组,那么我确实会遇到编译错误。 DataRowAttribute的签名是public DataRowAttribute (object data1); 和public DataRowAttribute (object data1, params object[] moreData); 第一个给我没问题,但第二个似乎变得困惑。 我认为params object[]可能会造成一些混乱。 也许它无法确定我的意思是[DataRow(new[] { 1 }, new[] { “1” })]还是[DataRow(new[] { 1 }, “1”)] 为了解决这个问题,我尝试将第二个属性转换为object ( [DataRow(new[] { 1 }, (object)new[] { “1” })] ),但错误没有消失,它警告我认为演员是多余的。 我也尝试明确指定数组的类型,但这也没有帮助。 我可以添加第三个虚拟参数,即使null似乎解决了这个问题,但这只是一种解决方法。 这样做的正确方法是什么?

实施类/方法的属性装饰

继我最近关于大型复杂对象作为Web服务结果的问题之后 。 我一直在考虑如何确保所有未来的子类都可以序列化为XML。 现在,显然我可以实现IXmlSerializable接口然后读取它的读取器/写入器但我想避免它,因为它然后意味着我需要在我想要的时候实例化读取器/写入器,并且99.99%的时间我将使用字符串,所以我可能只写自己的字符串 。 但是,要序列化为XML,我只是用Xml来装饰类及其成员??? 属性( XmlRoot , XmlElement等),然后将其传递给XmlSerializer和StringWriter以获取字符串。 这一切都很好。 我打算把方法返回到一个通用的实用工具方法,所以我不需要担心类型等。 我担心的是:如果我没有使用必需的属性装饰类,则在运行时才会抛出错误。 有没有办法强制执行属性修饰? 可以用FxCop完成吗? (我还没用过FxCop) 更新: 很抱歉让这些人关闭,很多事要做! 绝对喜欢在测试用例中使用reflection来实现它的想法,而不是诉诸于FxCop(喜欢把所有东西放在一起).. Fredrik Kalseth的答案非常棒,感谢包含代码,因为它可能会让我有点挖掘弄清楚自己该怎么做! +1给其他人类似的建议:)

如果找不到元素,我是否可以在C#中使用XmlSerializer反序列化?

我正在使用XmlSerializer在C#中将对象写入和读取到xml。 我目前使用属性XmlElement和XmlIgnore来操作对象的序列化。 如果我的xml文件缺少我需要的xml元素,我的对象仍然反序列化(xml – > object)就好了。 如何指示(最好通过属性)某个字段是“必需的”? 这是我目前使用的示例方法: [XmlElement(ElementName=”numberOfWidgets”)] public int NumberThatIsRequired { set …; get …; } 我理想的解决方案是添加类似XmlRequired属性的东西。 另外,对于哪些属性可用于操纵XmlSerializer的行为,是否有一个很好的参考?