從髖關節,沿東西線拍攝...
private static string GetSelected<T>(T type_, T checkedType_) where T : System.Enum{
//As before
}
顯然,這是非法的。
要簡單地削減重複,你可以只用枚舉正是如此替換T,
private static String GetSelected(Enum type_, Enum checkedType_){
if(type_.CompareTo(_checkedType) == 0) return "selected";
return "";
}
雖然這並不在類型安全的方式得到你很多,作爲兩個不同的枚舉類型,可以通過在
您可以改爲在運行時失敗:
private static String GetSelected(Enum type_, Enum checkedType_){
if(type_.GetType() != checkedType.GetType()) throw new Exception();
//As above
}
爲了得到一些你可以使用通用約束編譯時的安全性,但因爲你不能使用枚舉類,你將不能夠限制一切:
private static String GetSelected<T>(T type_, T checkedType_) where T : IComparable, IFormattable, IConvertible{
if(!(first is Enum)) throw new Exception();
//As above
}
以上將確保你只能通過相同類型的枚舉(如果你在兩個不同的枚舉傳給你會得到一個類型推斷的錯誤),但將在符合T約束條件的非Enum條件通過時進行編譯。
不幸的是,這裏似乎沒有很好的解決方案。
更新了我的答案,不要太可怕,可怕,錯誤。對於那個很抱歉。 – 2009-11-28 04:56:43