C# 重新分配参数(本地)是否不合适?

C# 重新分配参数(本地)是否不合适?,c#,parameters,variable-assignment,C#,Parameters,Variable Assignment,C#社区是否普遍反对修改参数?例如,一个流行的样式检查器会抱怨下面的参数重新分配方面吗 public void Create(Template template = null) { if (template == null) template = GetDefaultTemplate(); // ... } 另一种方法是如下所示,但假设代码块适当小,可能就不那么清楚了: public void Create(Template template = null) { var

C#社区是否普遍反对修改参数?例如,一个流行的样式检查器会抱怨下面的参数重新分配方面吗

public void Create(Template template = null) {
    if (template == null) template = GetDefaultTemplate();
    // ...
}
另一种方法是如下所示,但假设代码块适当小,可能就不那么清楚了:

public void Create(Template template = null) {
    var theActualTemplate = template ?? GetDefaultTemplate();
    // ...
}
我为这个肯定很累/已经回答的问题道歉,但奇怪的是,我在上面找不到任何东西。我试着浏览了一些C风格的指南(包括这里的所有指南),但没有发现这个问题。也许这不是问题


如果您对此有一个相对权威的来源,我很乐意听到它。

当您需要为引用类型设置默认值时,它会很有用,因为您不能像为值类型那样真正指定它

public void Create(int templateId = 1) {
    // this will compile
    // ...
}

 public void Create(Template template = GetDefaultTemplate()) {
    // this WON'T compile
    // ...
}

使用
null
作为引用类型的默认值可以帮助您定义参数的默认对象。

在示例中,您只是在方法范围内修改变量。因为这是您的局部变量,所以您的方法可以随意使用它—它不会影响调用者。一般来说,最好使用相同的变量,因为它使代码更易于维护-如果创建新变量,则会增加意外使用错误变量并获得NullReferenceException的风险


如果您只使用
ref
关键字,则分配将影响调用者。

这不是他问的,他问的是是否可以在方法中更改模板上的值。我想这张海报理解了我的问题,但是忽略了另一种处理方法是为这个赋值创建一个新的局部变量。事实上,我主要关注
Template Template=null
参数。也许你找不到关于这个主题的任何东西,因为没有人对它有问题。将此与分配给foreach循环变量形成对比:这太难看了,以至于语言设计者选择将其设置为非法。对于参数的赋值,情况并非如此。请注意,在methodSide备注之外,您并没有真正更改
模板
,我认为投票以“基于意见”结束,但我想指出,如果您认为这是基于意见的,这就是我问题的答案。我不是问你怎么想,我是问是否有一个既定的做法。如果没有,我有能力制定自己的风格规则。特别要注意的是,如果它出现在StyleCop或其他工具中,那么这个问题是有效的。事实上,它(显然)没有,这也使得这个问题有效。另一方面,如果它关闭,我不会太生气,我已经有了我的答案。谢谢你,是的,这就是我要问的。我理解(缺乏)对调用者的影响(具体到C#,没有
ref
),但我认为这可能被认为是不好的形式。因为一些参数是
ref
,我总是避免将任何参数视为“我的局部变量”。但我想,在我意识到自己几乎永远不会使用
ref
之前,我已经养成了这个习惯。