2013-05-03 59 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