803 Stimmen

Nützlichste Attribute

Ich weiß, dass Attribute äußerst nützlich sind. Es gibt einige vordefinierte Attribute wie [Browsable(false)] mit dem Sie Eigenschaften auf der Registerkarte "Eigenschaften" ausblenden können. Hier ist eine gute Frage zur Erklärung von Attributen: Was sind Attribute in .NET?

Welche vordefinierten Attribute (und deren Namespace) verwenden Sie tatsächlich in Ihren Projekten?

8voto

Ich halte es für wichtig, an dieser Stelle zu erwähnen, dass auch die folgenden Eigenschaften sehr wichtig sind:

STAThreadAttribute 

Gibt an, dass das COM-Threading-Modell für eine Anwendung Single-Thread-Apartment (STA) ist.

Dieses Attribut wird zum Beispiel in Windows Forms-Anwendungen verwendet:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

Und außerdem ...

SuppressMessageAttribute

Unterdrückt die Meldung einer bestimmten Regelverletzung eines statischen Analysewerkzeugs, wobei mehrere Unterdrückungen für ein einzelnes Code-Artefakt möglich sind.

Zum Beispiel:

[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "isChecked")]
[SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "fileIdentifier")]
static void FileNode(string name, bool isChecked)
{
    string fileIdentifier = name;
    string fileName = name;
    string version = String.Empty;
}

7voto

Eldritch Conundrum Punkte 8152

Aus dem Stegreif habe ich hier eine kurze Liste vordefinierter Attribute, die ich in einem großen Projekt (~500k LoCs) verwende, grob sortiert nach Häufigkeit der Verwendung:

Flags, Serializable, WebMethod, COMVisible, TypeConverter, Conditional, ThreadStatic, Obsolete, InternalsVisibleTo, DebuggerStepThrough.

6voto

Kevin Driedger Punkte 47526

[DeploymentItem("myFile1.txt")] MSDN-Doku über DeploymentItem

Dies ist sehr nützlich, wenn Sie gegen eine Datei testen oder die Datei als Eingabe für Ihren Test verwenden.

6voto

Ming Yeh Punkte 1

Ich generiert Daten Entity-Klasse über CodeSmith und ich verwenden Attribute für einige Validierung Routine. Hier ist ein Beispiel:

/// <summary>
/// Firm ID
/// </summary>
[ChineseDescription("")]
[ValidRequired()]
public string FirmGUID
{
    get { return _firmGUID; }
    set { _firmGUID = value; }
}

Und ich habe eine Utility-Klasse, um die Validierung auf der Grundlage der Attribute an die Daten Entity-Klasse zu tun. Hier ist der Code:

namespace Reform.Water.Business.Common
{
/// <summary>
/// Validation Utility
/// </summary>
public static class ValidationUtility
{
    /// <summary>
    /// Data entity validation
    /// </summary>
    /// <param name="data">Data entity object</param>
    /// <returns>return true if the object is valid, otherwise return false</returns>
    public static bool Validate(object data)
    {
        bool result = true;
        PropertyInfo[] properties = data.GetType().GetProperties();
        foreach (PropertyInfo p in properties)
        {
            //Length validatioin
            Attribute attribute = Attribute.GetCustomAttribute(p,typeof(ValidLengthAttribute), false);
            if (attribute != null)
            {
                ValidLengthAttribute validLengthAttribute = attribute as ValidLengthAttribute;
                if (validLengthAttribute != null)
                {
                    int maxLength = validLengthAttribute.MaxLength;
                    int minLength = validLengthAttribute.MinLength;
                    string stringValue = p.GetValue(data, null).ToString();
                    if (stringValue.Length < minLength || stringValue.Length > maxLength)
                    {
                        return false;
                    }
                }
            }
            //Range validation
            attribute = Attribute.GetCustomAttribute(p,typeof(ValidRangeAttribute), false);
            if (attribute != null)
            {
                ValidRangeAttribute validRangeAttribute = attribute as ValidRangeAttribute;
                if (validRangeAttribute != null)
                {
                    decimal maxValue = decimal.MaxValue;
                    decimal minValue = decimal.MinValue;
                    decimal.TryParse(validRangeAttribute.MaxValueString, out maxValue);
                    decimal.TryParse(validRangeAttribute.MinValueString, out minValue);
                    decimal decimalValue = 0;
                    decimal.TryParse(p.GetValue(data, null).ToString(), out decimalValue);
                    if (decimalValue < minValue || decimalValue > maxValue)
                    {
                        return false;
                    }
                }
            }
            //Regex validation
            attribute = Attribute.GetCustomAttribute(p,typeof(ValidRegExAttribute), false);
            if (attribute != null)
            {
                ValidRegExAttribute validRegExAttribute = attribute as ValidRegExAttribute;
                if (validRegExAttribute != null)
                {
                    string objectStringValue = p.GetValue(data, null).ToString();
                    string regExString = validRegExAttribute.RegExString;
                    Regex regEx = new Regex(regExString);
                    if (regEx.Match(objectStringValue) == null)
                    {
                        return false;
                    }
                }
            }
            //Required field validation
            attribute = Attribute.GetCustomAttribute(p,typeof(ValidRequiredAttribute), false);
            if (attribute != null)
            {
                ValidRequiredAttribute validRequiredAttribute = attribute as ValidRequiredAttribute;
                if (validRequiredAttribute != null)
                {
                    object requiredPropertyValue = p.GetValue(data, null);
                    if (requiredPropertyValue == null || string.IsNullOrEmpty(requiredPropertyValue.ToString()))
                    {
                        return false;
                    }
                }
            }
        }
        return result;
    }
}
}

5voto

CSharper Punkte 6697

[System.Security.Permissions.PermissionSetAttribute] ermöglicht die Anwendung von Sicherheitsmaßnahmen für ein PermissionSet auf Code mit deklarativer Sicherheit.

// usage:
public class FullConditionUITypeEditor : UITypeEditor
{
    // The immediate caller is required to have been granted the FullTrust permission.
    [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
    public FullConditionUITypeEditor() { }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X