2010-04-28 10 views
22

Jedes Mal, wenn ich den Standardwert eines optionalen Parameter, um etwas in einer Ressourcendatei zu setzen versuchen, erhalte ich einen Fehler bei der Kompilierung vonEinstellen des Standardwertes eines C# Optional Parameter

Standard-Parameterwert für ' Nachricht 'muss eine Kompilierzeitkonstante sein.

Gibt es eine Möglichkeit, wie ich die Funktionsweise der Ressourcendateien ändern kann, um dies zu ermöglichen?

public void ValidationError(string fieldName, 
          string message = ValidationMessages.ContactNotFound) 

Dabei ValidationMessages ist eine Ressource-Datei.

+0

@Joel: Danke! Der Flaggenpicker war zu dieser Zeit ein bisschen verrückt und ich wusste nicht, dass ich schief gegangen war. :-) – Jaxidian

Antwort

12

Nein, Sie können die Ressource nicht direkt im Standard arbeiten lassen. Sie müssen den Standardwert auf null setzen und dann die Ressourcensuche ausführen, wenn der Parameter im Hauptteil der Methode den Standardwert hat.

+0

Das war, wovor ich Angst hatte. Ich mag die Entwicklungszeit, weil es den Entwicklern sagt, was die Zeichenfolge sein wird: http://jaxidian.org/optparam.jpg Ich weiß, dass das, wonach ich frage (das Kompilieren der Ressourcendatei), einen Teil des Grundes tötet Es existiert, aber ich benutze es nicht für Lokalisierung und dynamische Änderungen, sondern nur als einen gemeinsamen Speicher für wiederverwendete Zeichenfolgen. – Jaxidian

+0

Aber natürlich! Danke für diese Antwort –

+0

aber einige Standardwerte sind nicht Nullable wie 'int'. wie gehst du damit um? –

13

Eine Möglichkeit ist, den Standardwert null und dann bevölkert, dass in geeigneter Weise zu machen:

public void ValidationError(string fieldName, string message = null) 
{ 
    string realMessage = message ?? ValidationMessages.ContactNotFound; 
    ... 
} 

Natürlich funktioniert dies nur, wenn Sie nicht wollen, null als echten Wert zu ermöglichen.

Eine andere mögliche Option wäre ein Pre-Build-Schritt, der eine Datei voller const Strings basierend auf den Ressourcen erstellt; Sie könnten dann auf diese Störungen verweisen. Es wäre jedoch ziemlich peinlich.

+0

Das war, wovor ich Angst hatte. Ich mag die Entwicklungszeit, weil es den Entwicklern sagt, was die Zeichenfolge sein wird: http://jaxidian.org/optparam.jpg Ich weiß, dass das, wonach ich frage (das Kompilieren der Ressourcendatei), einen Teil des Grundes tötet Es existiert, aber ich benutze es nicht für Lokalisierung und dynamische Änderungen, sondern nur als einen gemeinsamen Speicher für wiederverwendete Zeichenfolgen. – Jaxidian

11

Eine weitere Option ist Ihre Methode in zwei Teile zu spalten, und hat die eine Überlastung rufen Sie die andere, etwa so:

public void ValidationError(string fieldName) 
{ 
    ValidationError(fieldName, ValidationMessages.ContactNotFound); 
} 

public void ValidationError(string fieldName, string message) 
{ 
    ... 
} 

Auf diese Weise kann auch null als Wert für message im Fall passieren kann, das ist auch ein gültiger Wert für diesen Parameter.