我有一個方法,它接受一個對象並根據類型以字符串格式返回它。例如:當我提供一個枚舉該方法時發生將enum底層值轉換爲字符串而不知道枚舉類型
ConvertObjectToSQL(1); // "1"
ConvertObjectToSQL("Foo"); // "'Foo'"
ConvertObjectToSQL(DateTime.Now); // "'2017/02/22 00:00:00'"
我的問題。我希望我的方法能夠像我爲它提供枚舉基礎類型一樣。當然,我的方法是在我不可能知道枚舉類型的上下文中調用的。
首先,這裏是我做過什麼:
private string ConvertObjectToSQL(object obj)
{
if (obj == null)
{
return "NULL";
}
else if (obj is DateTime)
{
return "'" + obj.ToString() + "'";
}
else if (obj is string)
{
return "'" + obj.ToString().Replace("'", "''") + "'";
}
return obj.ToString();
}
但如果我的枚舉是:
enum FooEnum : int { Foo = 0, Bar = 1 }
如果想:
ConvertObjectToSQL(FooEnum.Foo); // "0"
ConvertObjectToSQL(FooEnum.Bar); // "1"
但它實際上返回:
ConvertObjectToSQL(FooEnum.Foo); // "Foo"
ConvertObjectToSQL(FooEnum.Bar); // "Bar"
所以我結束了一個新否則,如果做的工作:
else if (obj is Enum)
{
var baseType = Enum.GetUnderlyingType(obj.GetType());
return Convert.ChangeType(obj, baseType).ToString();
}
我的問題是:我能避免在這裏反思?因爲這種方法被稱爲很多次。
嘗試'ConvertObjectToSQL(((int)的FooEnum.Foo)的ToString())' –
@Luminous_Dev:可能不行,枚舉不是基於'int' ... – Chris
什麼期望@Luminous_Dev:正如我所說:'我的方法是在我無法知道枚舉類型的上下文中調用的。正如@Chris所說,枚舉不一定基於int。 – fharreau