Gibt es eine Möglichkeit, diese Methode generisch zu machen, sodass ich einen String, Bool, Int oder Double zurückgeben kann? Im Moment gibt sie einen String zurück, aber wenn sie in der Lage ist, "true" oder "false" als Konfigurationswert zu finden, möchte ich zum Beispiel ein bool zurückgeben.
public static string ConfigSetting(string settingName)
{
return ConfigurationManager.AppSettings[settingName];
}
Sie müssen es zu einer generischen Methode machen, etwa so:
public static T ConfigSetting<T>(string settingName)
{
return /* code to convert the setting to T... */
}
Aber der Aufrufer muss den Typ angeben, den er erwartet. Sie könnten dann möglicherweise Convert.ChangeType
verwenden, vorausgesetzt, dass alle relevanten Typen unterstützt werden:
public static T ConfigSetting<T>(string settingName)
{
object value = ConfigurationManager.AppSettings[settingName];
return (T) Convert.ChangeType(value, typeof(T));
}
Ich bin nicht ganz davon überzeugt, dass das alles eine gute Idee ist...
Sie könnten Convert.ChangeType()
verwenden:
public static T ConfigSetting<T>(string settingName)
{
return (T)Convert.ChangeType(ConfigurationManager.AppSettings[settingName], typeof(T));
}
private static T[] prepareArray<T>(T[] arrayToCopy, T value)
{
Array.Copy(arrayToCopy, 1, arrayToCopy, 0, arrayToCopy.Length - 1);
arrayToCopy[arrayToCopy.Length - 1] = value;
return (T[])arrayToCopy;
}
Ich habe dies in meinem gesamten Code durchgeführt und wollte eine Möglichkeit finden, es in eine Methode zu integrieren. Ich wollte dies hier teilen, weil ich nicht den Convert.ChangeType für meinen Rückgabewert verwenden musste. Das ist vielleicht nicht die beste Vorgehensweise, aber für mich hat es funktioniert. Diese Methode nimmt ein Array vom generischen Typ und einen Wert auf, der am Ende des Arrays hinzugefügt werden soll. Das Array wird dann kopiert, wobei der erste Wert entfernt wird und der in die Methode aufgenommene Wert am Ende des Arrays hinzugefügt wird. Als Letztes gebe ich das generische Array zurück.