我想从.Net6迁移到.Net8,并使用主构造函数。它在正常的依赖注入下工作得非常好,但如果我有一个字段,它只使用默认值,我不知道该怎么办。例如在这里:
示例#1
public class MyClass : IMyClass
{
private readonly IDependecyService dependencyService;
private readonly ConcurrentDictionary<string, TypedId?> typedIdDictionary;
public MyClass(IDependecyService dependencyService)
{
this.dependencyService = dependencyService;
typedIdDictionary = new();
}
...
}
字符串
我把它转换成:
public class MyClass(IDependecyService dependencyService) : IMyClass
{
private readonly ConcurrentDictionary<string, TypedId?> typedIdDictionary; = new();
...
}
型
但我得到了一个警告
错误S3604:删除成员初始化器,所有构造函数为成员设置初始值。(https://rules.sonarsource.com/csharp/RSPEC-3604)
另一个例子
发件人:
public class MyClass : IMyClass
{
private readonly string valueFromConfig;
public MyClass(IConfig config)
{
this.valueFromConfig = config.Value;
}
...
}
型
进入:
public class MyClass(IConfig config) : IMyClass
{
private readonly string valueFromConfig; = config.Value;
...
}
型
然后我得到了同样的警告。
提问
如何根据.Net规则和代码风格正确处理?
我尝试将默认值= new()
放入主构造函数,但它只接受值类型或null
。
1条答案
按热度按时间kfgdxczn1#
这不是一个C#错误。似乎所使用的SonarQube版本不完全支持C# 12。官方的C# 12支持已在9.13中添加。发行说明包括对涉及主构造函数的6个误报的修复:
字符串