2011-01-17 8 views
1

Ich möchte auf Default verwenden Attribut Standardwert für benutzerdefinierte Klasse zu definieren, die ich in meiner App schreiben. die Klasse gibt in seinem Kontraktor eine Schnur. Ich schreibe die folgen:Default Attribut in C#

[DefaultValue(Type.GetType("MyClass"),"hello world")] 

aber wenn ich versuche, diese App zu laufen. Ich gebe Fehler:

"An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type".

kann mir jemand erklären, was das Problem?

Antwort

6

Sie Type.GetType("MyClass") verwenden, wo Sie typeof(MyClass) haben sollte.

+0

es funktioniert, aber jetzt kann ich nicht den Wert dieses Attributs zu geben. Was soll ich schreiben um es zu geben? – RRR

+0

Ich denke, Sie müssen im Detail erklären, was Sie zu tun versuchen. –

+0

Ich versuche eine Enum zu erstellen, dass die Werte nicht int oder char sind. also schreibe ich vor jedem Wert - [DefaultValue (Type.GetType ("MyClass"), "11:00:00")] und im ctor der MyClass parse ich den String. Aber wie kann ich jetzt für jeden Wert den Wert erhalten, den ich in das DefaultValue Attribut schreibe? – RRR

2

Ich vermute, dass es das Type.GetType ("MyClass");

können Sie versuchen, typeof (MyClass) statt, den Typ vorbei und kein String?

+0

es funktioniert, aber jetzt kann ich nicht den Wert dieses Attributs geben. Was soll ich schreiben um es zu geben? – RRR

+0

Wird ein Fehler angezeigt? Ich habe gerade gelesen: http://www.eggheadcafe.com/software/aspnet/32319410/defaultvalue-attribute-on-properties-of-user-controls.aspx es erklärt ein wenig, wenn der Wert sichtbar wäre. Ich muss zugeben, dass ich DefaultValueAttributes nicht verwendet habe, bevor ich Ihnen helfen könnte, wenn Sie ein wenig mehr Details geben können. Die anderen Jungs in diesem Thread können vielleicht auch helfen, wenn sie diesen Kommentar sehen – WraithNath

1

Type.GetType() ist eine Methode (d. H. Kein konstanter Ausdruck), wie die anderen sagten, verwenden Sie typeof.

[DefaultValue(typeof(MyClass),"Convertible String")] 

Edit: die Umwandlung der Zeichenfolge in Ihrer benutzerdefinierten Klasse Damit Sie benötigen einen Typeconverter mit ihm zu verbinden, finden Sie in die Beispiele Schnitt this documentation eine Vorstellung davon zu bekommen, wie dies zu tun.

+0

es funktioniert, aber jetzt kann ich nicht den Wert dieses Attributs geben. Was soll ich schreiben um es zu geben? – RRR

+0

Ich habe nicht das Defaultattribut viel verwendet, aber wenn ich es tat, ich habe nie, um ihm eine Art benötigt, ich trat nur etwas Wert, wie dies für einen Bool: [Default (false)], da Sie mehr verwenden möchten komplexer Typ sollten Sie prüfen, wie es versucht, den Wert zu konvertieren, vielleicht muss Ihre Klasse eine Schnittstelle implementieren, damit es funktioniert. –

+0

Aktualisierte Antwort. –