协慌网

登录 贡献 社区

最有用的属性

我知道属性非常有用。有一些预定义的,例如[Browsable(false)]允许您在属性选项卡中隐藏属性。这是一个很好的解释属性的问题: .NET 中的属性是什么?

您在项目中实际使用的预定义属性(及其命名空间)是什么?

答案

在调试期间将鼠标悬停在 Type 的实例上时, [DebuggerDisplay]对于快速查看 Type 的自定义输出非常有用。例:

[DebuggerDisplay("FirstName={FirstName}, LastName={LastName}")]
class Customer
{
    public string FirstName;
    public string LastName;
}

这是它应该在调试器中查看的方式:

替代文字

另外,值得一提的是,具有CacheDuration属性集的[WebMethod]属性可以避免不必要的 Web 服务方法的执行。

在我看来, System.Obsolete是框架中最有用的属性之一。对不应再使用的代码发出警告的能力非常有用。我喜欢有办法告诉开发人员应该不再使用某些东西,以及有办法解释原因并指出更好 / 新的做事方式。

对于调试使用, Conditional attribute也非常方便。它允许您在代码中添加方法以用于调试目的,这些方法在构建解决方案时不会被编译。

然后有很多特定于 Web 控件的属性我觉得很有用,但是那些更具体,并且在我发现的服务器控件开发之外没有任何用途。

[Flags]非常方便。句法糖肯定,但仍然相当不错。

[Flags] 
enum SandwichStuff
{
   Cheese = 1,
   Pickles = 2,
   Chips = 4,
   Ham = 8,
   Eggs = 16,
   PeanutButter = 32,
   Jam = 64
};

public Sandwich MakeSandwich(SandwichStuff stuff)
{
   Console.WriteLine(stuff.ToString());
   // ...
}

// ...

MakeSandwich(SandwichStuff.Cheese 
   | SandwichStuff.Ham 
   | SandwichStuff.PeanutButter);
// produces console output: "Cheese, Ham, PeanutButter"

Leppie指出了一些我没有意识到的东西,这反过来削弱了我对这个属性的热情:它并没有指示编译器允许位组合作为枚举变量的有效值,编译器允许枚举变量。我的 C ++ 背景显示...... 叹息