[C#] Ottenere valori da Attributi campo personalizzati in C #


Answers

Question

Stamattina mi sono imbarcato in quello che pensavo sarebbe stato un esercizio veloce per usare attributi di campo personalizzati. Avendo provato molte cose e cercando molti esempi (la maggior parte coinvolge classe piuttosto che attributi di campo), sono ufficialmente bloccato.

Il mio codice è sotto Una particolarità è che la classe è costruita in FileHelpers usando il classbuilder. I miei vari tentativi parzialmente riusciti sono riusciti a ottenere i nomi di campo da questa classe, quindi credo che quella parte funzioni bene.

Quello che voglio fare (per il commento nel codice) è a) Esegui i campi, b) per ciascuno, controlla se esiste l'attributo DBDataTypeAttribute e c) La parte apparentemente più difficile - ottenere i valori dall'attributo (stringa FieldType e AllowNulls bool).

Qualsiasi commento apprezzato!

marchio

class Program
{
    static void Main(string[] args)
    {
        // Desired output:
        System.Type userType = null;
        userType = ClassBuilder.ClassFromString(@"
                                                public class ExpenseReport
                                                {
                                                    [FieldQuoted('""', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
                                                    [DBDataTypeAttribute(FieldType = ""varchar(1000)"", AllowNulls = true)]
                                                    public String UniqueID;
                                                    [FieldQuoted('""', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
                                                    public String ERNum;
                                                }");

        object[] attributes;
        attributes = userType.GetCustomAttributes(typeof(DBDataTypeAttribute), true);
        foreach (Object attribute in attributes)
        {
            // Would like to be able to ID for each field whether the DBDataTypeAttribute is present, and get the FieldType and AllowNulls Values

            DBDataTypeAttribute a = (DBDataTypeAttribute)attribute;
            Console.WriteLine("Attribute: ", a.FieldType);
            Console.ReadLine();

        }
    }
}

[AttributeUsage(AttributeTargets.Field)]
public class DBDataTypeAttribute : System.Attribute
{
    private string fieldtype;
    public string FieldType
    {
        get { return fieldtype; }
    }

    private string allownulls;
    public string AllowNulls
    {
        get { return allownulls; }
    }

}



Links