2016-08-02 8 views
-1

私はこの最も簡単な問題で多くの問題を抱えていました。 私はname属性を持つムービークラスを持っています。その名前のムービーインスタンスを返す静的関数を作成したいと思います。どのように私は、ムービーオブジェクトを返すだろう静的関数を書くことができます

これは、これまで私が持っているコードです:

public static Movie getMovieByName(string name) 
{ 
    if(this.name == name) 
    { 
     return this; 
    } 
    else 
    { 
     throw new InvalidMovieException(name); 
    } 
} 

class InvalidMovieException : System.Exception 
{ 
    public InvalidMovieException(string value) : base(String.Format("This movie doesn't exist! Value: {0}", value)) { } 
} 

私は静的メソッドで「これを」キーワードを使用することはできませんエラーを取得しています。私はそれを理解していますが、静的にするにはまだこの方法が必要です。 誰かが私のプロジェクトで私を助けてくれることを願っています:)

ありがとうございました!

+1

これは静的であってはいけません。あなたは世界で1つの映画しか存在しないと言っていますか?とにかく、あなたはムービーの静的なコピーを持っていなければなりません。 – Dispersia

+0

あなたは 'Dictionary 'を探していると思います。 –

答えて

1

作成したムービーインスタンスを保存してから、それを反復処理する必要があります。あなたが作成または作品のコンストラクタのいずれかで、moviesリストに追加することができます作品のインスタンスを作成するには

public static List movies; 

public static Movie getMovieByName(string name) 
{ 
    foreach(Movie m in movies) 
    { 
     if(m.name == name) 
      return m; 
    } 

    throw new InvalidMovieException(name); 
} 

: あなたは、このような操作を行うことができます。

0

論理的には、thisstaticのメンバーを指しますか?あなたがこのメンバーを呼び出すと思いますどのように考えてみましょう:

Movie.getMovieByName("Highlander") 

thisでしょうか?あなたはMovieのインスタンスのコンテキストで動作していないので、は、thisではありません。

あなたは何ですか実際にはが返そうとしていますか?文字列の値とMovieオブジェクトの名前を比較する場合は、それらの名前をMovieオブジェクトにする必要があります。

例として、Movieのデータベースリポジトリがどこかにあるとします。

public static Movie getMovieByName(string name) 
{ 
    var movie = MovieRepository.Movies.SingleOrDefault(m => m.name == name); 
    if(movie != null) 
    { 
     return movie; 
    } 
    else 
    { 
     throw new InvalidMovieException(name); 
    } 
} 

は基本的にあなたが映画のリストから映画を見つけることがしたい:あなたは、このような構造を持っているかもしれません。現在、あなたのメソッドには何もありません。メソッドに渡された文字列があります。

関連する問題