2016-03-22 28 views
0

所以我有一個公共方法,我希望人們使用助手對象的參數。該方法實際上是期待一個字符串,但我想強制使用一個輔助對象特定返回的字符串..如何執行方法中的特定對象參數

這個例子在這裏,第一個參數'qt'會期望一個字符串,但我不想讓人通過剛纔的任何字符串,我希望他們只能夠通過MyObject.Property(它返回一個特定的字符串。)

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

查詢類型將是一個抽象類,也就有了像「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值。

public string Query(Album album) 
{ 
    //do something   
} 
+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

相關問題