2013-05-03 57 views
4

我想用this的,因爲這代碼類方法的默認值:給予「這個」作爲類方法的默認值

public class Article 
{ 
    public int Id;//PK 
    public String Author;//can be empty=anonymous 
    public int? ToPublishDate; 
    public String Summery; 
    public String Content; 
    public int RegDate; 
    public Boolean Publish; 

    private Boolean write(Article article=this,long position) 
    { 
     return true; 
    } 
} 

this給我這個錯誤:

Default parameter value for 'article' must be compile-time constant.

爲什麼會發生此錯誤,我該如何解決?

+0

可能是這一個幫助你http://stackoverflow.com/questions/2729639/setting-the-default-value-of-ac-sharp-optional-parameter(或)http://stackoverflow.com/questions/7672005/optional -parameters-must-a-compile-time-constant – snowp 2013-05-03 04:56:48

+0

如果你有一個寫入任意實例的方法,並且不需要涉及被調用的實例,那麼你應該使它成爲靜態的!也許你的情況有所不同,但這往往是慣例。換句話說:如果'someArticle.write(otherArticle,1)'暗示它實際上會以某種方式執行'someArticle'實例。如果'someArticle'從來沒有涉及到你調用該方法的實例,那麼它應該只是'Article.write(otherArticle,1)'。 – doppelgreener 2013-05-03 05:16:23

回答

12

你可以設置默認爲空,然後重置其默認的方法:(另請注意,所有非默認參數必須出現在任何默認的)

private Boolean write(long position, Article article=null) 
{ 
    article = article ?? this; 
} 

+2

+1。同樣,如果可以傳入'null'作爲可能的值,那麼您需要覆蓋而不是默認參數('bool Write(long position){return Write(position,this);}') – 2013-05-03 04:59:50

+2

@Alexei您的意思是重載,不是一個覆蓋;) – doppelgreener 2013-05-03 05:14:12

+0

@JonathanHobbs,對...不知道我爲什麼這麼說。 – 2013-05-03 05:18:33