Ich verwende gerne Eigenschaften in einer Klasse anstelle von Methoden, da sie eher wie eine Aufzählung aussehen.
Hier ist ein Beispiel für einen Logger:
public class LogCategory
{
private LogCategory(string value) { Value = value; }
public string Value { get; private set; }
public static LogCategory Trace { get { return new LogCategory("Trace"); } }
public static LogCategory Debug { get { return new LogCategory("Debug"); } }
public static LogCategory Info { get { return new LogCategory("Info"); } }
public static LogCategory Warning { get { return new LogCategory("Warning"); } }
public static LogCategory Error { get { return new LogCategory("Error"); } }
public override string ToString()
{
return Value;
}
}
Einreichen typsichere String-Werte als Parameter:
public static void Write(string message, LogCategory logCategory)
{
var log = new LogEntry { Message = message };
Logger.Write(log, logCategory.Value);
}
Verwendung:
Logger.Write("This is almost like an enum.", LogCategory.Info);
1 Stimmen
Mögliche Duplikate von Enum ToString
24 Stimmen
Ich bin mir nicht sicher, warum die meisten Antworten nicht einfach "const string" verwenden und stattdessen eigene Klassen erstellen.
2 Stimmen
Sie können zwar keine Zeichenketten verwenden, aber Sie können sehr wohl Zeichenketten verwenden. Das ist eine Option, wenn Sie Werte mit nur einem Buchstaben verwenden können.
2 Stimmen
Ich bin wirklich verwirrt, warum die oben von CTS_AE vorgeschlagene Lösung nicht einmal unter den ersten drei Antworten ist.
0 Stimmen
@Sinjai Die explizite Gruppierung zusammengehöriger Werte wiegt den Nachteil eines unmerklichen Leistungsverlusts auf, insbesondere bei einer API oder einer wiederverwendbaren Komponente.
0 Stimmen
Ich bin verwirrt. Während das Erstellen einer benutzerdefinierten Klasse, wie in der vorgeschlagenen Antwort vorgeschlagen, funktioniert, bin ich der Meinung, dass eine
const string
scheint der eigentliche Kandidat für dieses Problem zu sein. Ich würde es einfach halten.6 Stimmen
@Sau001 / CTS_AE - wollte dies hier anbringen, da diese Kommentare ganz oben stehen und man ein wenig scrollen muss, um die Antwort zu finden. Siehe den Kommentar von Pharap zu dieser Antwort: stackoverflow.com/a/5674697/5948647 . Statische Klassen können nicht als Methodenparametertypen verwendet werden, so dass Sie die Verwendung einer Ihrer vordefinierten konstanten Zeichenketten in Methoden nicht erzwingen können.