2016-04-12 7 views
-4

私は現在の週の番号を返すメソッドを持つ単純なクラスを持っています。メソッドのINT値をコントローラのINT変数weekNumに設定しようとすると、クラスメソッドへの呼び出しの下に赤い行が表示され、「暗黙のうちにタイプ....をintに変換できません"どうして?どちらもINTですが、そうではありません!戻り値の型はメソッドのINTです。私はここで何かを逃したのですか?私はそれがちょっとしたエラーだと思いますか?コントローラ内部のクラス戻りINTですが変数に不満があります

:メソッドと

int weekNum = new Namespace.Helpers.Week(); 

私のクラス:

public class Week 
{ 
    public int WeekNum() 
    { 
     var culture = CultureInfo.GetCultureInfo("se-SE"); 
     var dateTimeInfo = DateTimeFormatInfo.GetInstance(culture); 
     var dateTime = DateTime.Today; 
     int weekNumber = culture.Calendar.GetWeekOfYear(dateTime, dateTimeInfo.CalendarWeekRule, dateTimeInfo.FirstDayOfWeek); 

     return weekNumber; 
    } 
} 
+6

このメソッドを呼び出すのではなく、コンストラクタを呼び出すだけです。あなたの呼び出しコードを見てください。あなたは 'WeekNum'をどこにも言及していません。 –

+1

int weekNum = new Namespace.Helpers.Week()。WeekNum(); – user469104

+1

@EhsanSajjad:いいえ、コードはインスタンスを作成していますが、メソッドを呼び出すことはありません。 –

答えて

7

クラスが値を返さない、方法がありません:

var week = new Namespace.Helpers.Week(); 

int weekNum = week.WeekNum(); 
1

あなたがしようとしていますWeekクラスインスタンスをint変数に割り当てます。

Week week = new Week(); 
int weekNum = week.WeekNum(); 

をまたは静的にあなたの週のクラスを変更:

あなたはこのような何かを行う必要があります。

0

クラスにintにimplicit conversionを実装することでシナリオを処理できます。それはベストプラクティスではなく、より良い方法は、インスタンスメソッドを使用することをお勧めします他の回答のいずれかを使用することであることを

public class Week 
{ 
    public static implicit operator int(Week d) 
    { 
     var culture = CultureInfo.GetCultureInfo("se-SE"); 
     var dateTimeInfo = DateTimeFormatInfo.GetInstance(culture); 
     var dateTime = DateTime.Today; 
     int weekNumber = culture.Calendar.GetWeekOfYear(dateTime, dateTimeInfo.CalendarWeekRule, dateTimeInfo.FirstDayOfWeek); 

     return weekNumber; 
    } 
} 

注:ちょうどWeekNum()implicit operatorに変更します。

関連する問題