我知道属性非常有用.有一些预定义的,例如,[Browsable(false)]它允许您在属性选项卡中隐藏属性.这是一个很好的解释属性的问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其命名空间)是什么?
这会导致编译时异常:
public sealed class ValidatesAttribute<T> : Attribute
{
}
[Validates<string>]
public static class StringValidation
{
}
Run Code Online (Sandbox Code Playgroud)
我意识到C#不支持通用属性.然而,经过大量的谷歌搜索,我似乎无法找到原因.
有谁知道为什么泛型类型无法衍生出来Attribute?任何理论?
我想知道是否可以获取枚举值的属性而不是枚举本身的属性?例如,假设我有以下枚举:
using System.ComponentModel; // for DescriptionAttribute
enum FunkyAttributesEnum
{
[Description("Name With Spaces1")]
NameWithoutSpaces1,
[Description("Name With Spaces2")]
NameWithoutSpaces2
}
Run Code Online (Sandbox Code Playgroud)
我想要的是枚举类型,产生2元组的枚举字符串值及其描述.
价值很容易:
Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);
Run Code Online (Sandbox Code Playgroud)
但是如何获取描述属性的值,以填充Tuple.Desc?如果属性属于枚举本身,我可以想到如何做到这一点,但我不知道如何从枚举的值中获取它.
鉴于这门课程
class Foo
{
// Want to find _bar with reflection
[SomeAttribute]
private string _bar;
public string BigBar
{
get { return this._bar; }
}
}
Run Code Online (Sandbox Code Playgroud)
我想找到我将用属性标记的私有项_bar.那可能吗?
我已经用我寻找属性的属性做了这个,但从来没有私有成员字段.
获取私有字段需要设置哪些绑定标志?
ASP.NET MVC中DisplayName属性和Display属性有什么区别?
c# asp.net-mvc data-annotations displayattribute .net-attributes
继我最近关于大型复杂对象作为Web服务结果的问题之后.我一直在考虑如何确保所有未来的子类都可以序列化为XML.
现在,显然我可以实现IXmlSerializable接口然后读取它的读者/写入器,但我想避免它,因为它意味着我需要在我想要的时候实例化读写器,并且99.99%的时间我将使用字符串,所以我可能只写自己的字符串.
但是,要序列化为XML,我只是用Xml来装饰类及其成员??? 属性(XmlRoot,XmlElement等),然后将其传递给XmlSerializer和StringWriter以获取字符串.这一切都很好.我打算把方法返回到一个通用的实用工具方法,所以我不需要担心类型等.
我担心的是:如果我没有使用必需的属性装饰类,则在运行时才会抛出错误.
有没有办法强制执行属性修饰?可以用FxCop完成吗?(我还没用过FxCop)
很抱歉让这个关闭的人有很多关闭,很多事要做!
绝对喜欢在测试用例中使用反射来实现它的想法,而不是诉诸于FxCop(喜欢把所有东西放在一起).. Fredrik Kalseth的答案很棒,感谢包含代码,因为它可能会让我有点挖掘弄清楚自己该怎么做!
+1给其他人类似的建议:)
我正在使用XmlSerializer在C#中将对象写入和读取到xml.我目前使用属性XmlElement并XmlIgnore操纵对象的序列化.
如果我的xml文件缺少我需要的xml元素,我的对象仍然反序列化(xml - > object)就好了.如何指示(最好通过属性)某个字段是"必需的"?
这是我目前使用的示例方法:
[XmlElement(ElementName="numberOfWidgets")]
public int NumberThatIsRequired {
set ...;
get ...;
}
Run Code Online (Sandbox Code Playgroud)
我理想的解决方案是添加类似XmlRequired属性的东西.
另外,对于哪些属性可用于操纵XmlSerializer的行为,是否有一个很好的参考?
背景:在属性规范中,有时存在两种写入应用属性的有效方法。例如,如果属性类具有名称HorseAttribute,则可以将属性应用为[HorseAttribute]或[Horse]。歧义可以用@例如来解决[@Horse]。
以下是有效的程序:
using System;
using Alpha;
using Beta;
namespace N
{
[Horse]
class C
{
}
}
namespace Alpha
{
// valid non-abstract attribute type with accessible constructor
class HorseAttribute : Attribute
{
}
}
namespace Beta
{
// any non-attribute type with that name
enum Horse
{
}
}
Run Code Online (Sandbox Code Playgroud)
Alpha.HorseAttribute我编写just时,C#编译器可以选择[Horse]。毕竟,类型Beta.Horse完全不适合在属性规范中使用。
即使交换名称,C#编译器也会知道该怎么做:
using System;
using Alpha;
using Beta;
namespace N
{
[Horse] …Run Code Online (Sandbox Code Playgroud) .net-attributes ×10
c# ×10
.net ×3
reflection ×2
xml ×2
asp.net-mvc ×1
coding-style ×1
enums ×1
generics ×1
glossary ×1