2016-08-01 15 views
2

私は次の拡張子を持つenumを持っています。このenum列挙型の拡張

public enum BillingInterval 
{ 
    Monthly = 1, 
    Quarterly = 2, 
    Yearly = 3 
} 

とすることが可能です拡張子:

public static class EnumExtension 
{ 
    public static SelectList ToSelectList(this Enum en) 
    { 
     var list = (from Enum d in Enum.GetValues(en.GetType()) 
       select new SelectListItem { Value = d.ToString(("d")), Text = Enum.GetName(en.GetType(), d) }).ToList(); 

     var selectedValue = (int) Enum.Parse(en.GetType(), Enum.GetName(en.GetType(), en)); 

     return new SelectList(list, "Value", "Text", selectedValue); 
    } 
} 

ここで私が話しているenumです次の操作を実行します。

public ActionResult Test() 
{ 
    var vm = new CustomerViewModel(); 

    vm.BillingIntervalOptions = CustomerModel.BillingInterval.ToSelectList(); 
} 

今や私のモードlは、私はちょうど別のenumを作った、と私は、このenumが同じ拡張子を持つであろうと仮定だろうが、私は次のことをしようとすると、I私enum

PROBLEM

から値を含むSelectListを持っていますコンパイルエラーを取得:

public enum Status 
{ 
    Trial = 1, 
    Demo = 2, 
    Setup = 3, 
    Production = 4 
} 

public ActionResult Test() 
{ 
    var vm = new CustomerViewModel(); 

    vm.BillingIntervalOptions = CustomerModel.BillingInterval.ToSelectList(); 

    //This gives me a compile error 
    vm.StatusOptions = Status.ToSelectList(); 
} 

'Status' does not contain a definition for 'ToSelectList'

enumsの一つは拡張子bを持っている理由私はかなりよく分かりません他の人はそうしない。

注:二列挙StatusBillingInterval列挙型と同じファイルではありません。これが問題だろうか?

答えて

5

CustomerModel.BillingIntervalは、enumの値を保持するプロパティです。 Statusはタイプであり、インスタンスではありません。

拡張メソッドはインスタンスでのみ動作し、型では動作しないため、2番目のステートメントは失敗します。

2

実際にtypeと対話しようとすると、enumobjectではありません。それは次のようになります。

var statusEnumInstance = Status.Trial; //here your instance 
vm.StatusOptions = statusEnumInstance.ToSelectList(); 

あなたが列挙型のオブジェクトとyoutはCustomerModelプロパティへの参照becouseそれは最初のケースで働きます。

関連する問題