2016-03-22 9 views
0

パブリックメソッドを使用して、パーマネントのヘルパーオブジェクトを使用するようにします。このメソッドは文字列を実際に期待していますが、ヘルパーオブジェクトによって具体的に返された文字列を使用して強制します。メソッドのパラメータに特定のオブジェクトを適用する方法

この例では、最初のパラメータ 'qt'は文字列を期待しますが、ちょうど任意の文字列を渡すために、私は彼らが唯一のMyObject.Property渡すことができるようにしたい(特定の文字列を返します。)

public string Query(QueryType qt, string artist, string album, string song) 
{ 
    // DoStuff 
} 

のquerytypeは抽象クラスになり、「GetSimilar」のような性質を持っているだろう、 " GetTags "などがあります。ここでは、どのように使用するかの例を示します。

var json = LastFM.Query(Album.GetSimilar, "Nirvana", "Nevermind"); 

だから私は次のようなことを避けたいと思います:

var whatever = new Album().GetSimilar; 
var json = Query(whatever, "dah","dah","dah"); 

これを達成する最良の方法は何ですか?ありがとう!

+1

呼び出し側が特定の方法で 'Query() 'を呼び出すことを強制するドライバ(理由、値)とは何ですか?なぜ迷惑? –

+0

多かれ少なかれ、私はそれをやる方法を知りたいだけです。 – Nobody

答えて

1

このような「スマート列挙型のパターン」の使用:

public sealed class Album 
{ 
    public static readonly Album Similiar = new Album("Similiar"); 
    public static readonly Album Tags = new Album("Tags"); 


    public string Value { get; private set; } 

    private Album(string value) 
    { 
     this.Value = value; 
    } 
} 

をして、ユーザーが唯一のあなたの事前定義されたAlbum値を使用することができます。

+0

ありがとう!これらの答えの両方が正常に動作します!私は+1しますが、十分な担当者はまだいません。 :( – Nobody

1

私はこのために列挙型を使用することができますね。列挙型は、使用できる一連の値を定義し、その値の集合に限定されています。あなたが最初の引数は唯一Album.GetSimilarまたはいくつかの他の値にしたい場合は

、あなたはこの

public enum QueryTypeEnum { 
    AlbumGetSimilar, 
    AlbumGetSomeOtherStuff, 
    SomeOtherStuff 
} 

を行い、QueryTypeEnumを受け入れる方法を変更することができます。この方法では、switchのパラメータを使用して、それに応じて行います。

public enum Artist {...} 
public enum Album {...} 
public enum Song {...} 

をそして、あなたの方法は次のようになります:

また、同様に他のパラメータのためにこれを行うことができますが、これはあまりにも多くのコードであると考えられる場合は

public string Query(QueryTypeEnum qt, Artist artist, Album album, Song, song) {} 

、ちょうどArgumentExceptionを投げます引数が間違っている場合。

if (!CheckArgumentValid(song)) { 
    throw new ArgumentException("The song is invalid"); 
} 
+0

これらの回答はどちらもうまくいきます!私はあなたに+1したいがまだ十分な担当者はいない。:( – Nobody

関連する問題