2016-09-14 8 views
0

私のビューでASP.NET MVC 5 Entity Frameworkを使用しています。 toは列挙型を使用してドロップダウンメニューを設定します。これは私が私のクラスで得たものである:Enum.Parse暗黙的に型 'オブジェクト'を変換できません明示的な変換が存在します(キャストがありませんか)

public enum occupancyTimelineTypes : int 
    { 
     TwelveMonths = 12, 
     FourteenMonths = 14, 
     SixteenMonths = 16, 
     EighteenMonths = 18 
    } 

と、この:

[DisplayName("Occupancy Timeline")] 
     [Required] 
     public string occupancyTimeline { get; set; } 

     public occupancyTimelineTypes occupancyTimelineType 
     { 
      get 
      { 
       return Enum.Parse(typeof(occupancyTimelineTypes), occupancyTimeline); 

      } 
     } 

私の問題は私が解決する方法が分からないエラーを取得しています、次のとおりです。

Cannot implicitly convert type 'object' to An explicit conversion exists (are you missing a cast?) 

次のようにドロップダウンメニューに値を設定しています:

、ここでは、場所に置くと、これらのエラーを修正するために、私はHtml.EnumDropDownListFor()を使用しませんようにあまりにも多くのエラーが表示されることができず、私のToSelectList()方法

public static class MyExtensions 
    { 
     public static SelectList ToSelectList(this occupancyTimelineTypes enumObj) 
     { 
      var values = from occupancyTimeline e in Enum.GetValues(typeof(occupancyTimeline)) 
         select new { Id = e, Name = string.Format("{0} Months", Convert.ToInt32(e)) }; 
      return new SelectList(values, "Id", "Name", enumObj); 
     } 
    } 

とその悪夢です。

これは@Html.DropDownListFor

+0

エラーが示唆していることを試してみましたか? '(キャストがありませんか?)' – RafaelC

+0

エラーメッセージが実際に役に立っていることは数回あります:) – KSib

答えて

5

Enum.Parseを返すオブジェクト(それはジェネリックではありません)ので、明示的にあなたの戻り値をキャストする必要がなければなりません。使用:

return (occupancyTimelineTypes)Enum.Parse(typeof(occupancyTimelineTypes), occupancyTimeline); 
+0

なぜ彼らはそのように動作するように 'Enum.Parse'を設計したのだろうかと思います。ひどく冗長でキャストする必要があります... – KSib

+1

.NET Frameworkが最初に書かれたとき、ジェネリックスのようなものはありませんでした。したがって、唯一可能な戻り値の型は 'object'です。 – Chris

+1

あなたは 'Enum.Parse (オブジェクトobj)' – KSib

関連する問題