2017-10-05 69 views
0

我使用ASP.NET和越來越小的麻煩Enum需要。因爲我改成了:鑄造的Int32是在使用枚舉GetName方法

@foreach (SelectListItem lang in Html.GetEnumSelectList<Lang>()) 
{ 
    string name = Enum.GetName(typeof(Lang), lang.Value); 
} 

我得到這個錯誤消息:

的ArgumentException:傳入的值必須是一個枚舉鹼或基礎類型的枚舉,如一個Int32 。 參數名:價值

然後,我會嘗試:

string name = Enum.GetName(typeof(Lang), Convert.ToInt32(lang.Value)); 

它的工作。

這是爲什麼?

Lang.enbyte,爲什麼它需要Int32

回答

1

如果我們看一下對Enum.GetName的文件中,我們可以讀到:

ArgumentException的
* enumType不是Enum

* value既不是enumType類型也不是與enumType相同

的問題是,在你的第二個方法,你正在使用Convert.ToInt32(lang.Value),因此獲得Int32,而不是一個byte爲您枚舉需要:

public enum Lang : byte 

所以,簡單的解決方案是在一個byte來傳遞的,而不是int

string name = Enum.GetName(typeof(Lang), Convert.ToByte(lang.Value)); 
+0

幫助很多。謝謝 :) – Vayne