Optional parameters “must be a compile-time constant” with a const still bugging
我都读过
可选参数"必须是编译时常量"
和
值的默认参数必须是编译时常量?
但这并没有在声明上进行编译,将
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class MyClass { private const string Empty = string.Empty; private string WriteFailedList(string prefix = Empty, DeployResponse Ret) { StringBuilder sb = new StringBuilder(); var errorItems = Ret.Items.TakeWhile(item => item.Status == DeployItem.ItemStatus.Error); foreach (var item in errorItems) sb.AppendLine(string.Format("{0} {1}",prefix,item.Filename)); return sb.ToString(); } } |
@编辑:代码好的实践建议采取了乔恩斯基特。
您给出的代码有两个问题:
- 可选参数必须排在最后(除了
params 参数) const 字段必须分配编译时常量,string.Empty 不是常量字段- 因为
Empty 不是有效的const ,所以您的默认值不是const 。这只是第二个问题的推论。
这两个都很容易修复:
1 2 3 4 5 6 7 8 | private const string Empty =""; // Literal rather than String.Empty ... // Parameter name changed to be more readable and conventional private string WriteFailedList(DeployResponse response, string prefix = Empty) { ... } |
或者去掉你自己的
1 2 3 4 | private string WriteFailedList(DeployResponse response, string prefix ="") { ... } |
(我还建议您使用