我有一段C#代碼,它將enum的值按類型添加到下拉列表中。它要求用T1作爲枚舉類型來調用它,儘管我不能將它指定爲類型約束,因爲枚舉是特殊情況,在這種情況下這是不可能的。這不是一個主要的問題,因爲這隻在內部使用並且有文件記錄。在VS2008和IIS6之間有不同的C#類型轉換
說明是System.Enum上的擴展,如果未指定該值,則返回值的DescriptionAttribute的值或值的ToString。
因此,我必須將其轉換爲LINQ語句的Cast部分中的System.Enum,而不是T1,否則Description擴展名不可用。
public static void AddEnum<T1>(this System.Web.UI.WebControls.DropDownList me)
{
Type t = Enum.GetUnderlyingType(typeof(T1));
var l = Enum.GetValues(typeof(T1))
.Cast<System.Enum>()
.Select(x => new ListItem(x.Description(),
Convert.ChangeType(x, t)
.ToString()));
me.Items.AddRange(l.ToArray());
}
這是罰款和在Visual Studio 2008s網絡開發服務器工作,但是當IIS 6上運行它與不變運行,硬編碼枚舉作爲類型的參數來填充ASP頁失敗,出現轉換異常。
System.InvalidCastException:從 '%namespace.class + nameofenum%' 無效轉換到 'System.Enum'。 在System.Convert.DefaultToType(IConvertible 值,類型TARGETTYPE, 的IFormatProvider提供商) 在System.Convert.ChangeType(對象 值,類型conversionType, 的IFormatProvider提供商) 在System.Linq.Enumerable.d__b0
1.MoveNext() at System.Linq.Enumerable.<SelectIterator>d__d
2。的MoveNext() 在System.Linq.Buffer 源) 在System.Linq.Enumerable.ToArray [TSource](IEnumerable`1 源) 在AddEnum [T1](DROPDOWNLIST我)
(命名空間/ C lassname被我遮擋)
我無法在其他版本的IIS上測試它,但它似乎很奇怪開發版本與生產系統不匹配。有人知道爲什麼嗎?
不錯的工作,他們正在運行不同版本但不幸的是,我們不會很快提升生產現場。 感謝您的幫助。 – Toby 2008-11-14 03:28:41