1
private readonly Object _syncRoot = new Object();
public IdGenerator ClientIdGenerator
{
get
{
if (clientIdGenerator != null)
return clientIdGenerator;
lock (_syncRoot)
{
if (clientIdGenerator != null)
return clientIdGenerator;
return clientIdGenerator = ClientIdPrefix != null ? new IdGenerator(ClientIdPrefix) : new IdGenerator();
}
}
}
IdGeneratorのインスタンスを作成している行で、「Double-Check Lockingパターンの不正な実装が可能です。私はこれにコードを変更した後R# - Double-Check Lockingパターンの誤った実装の可能性があります。
R#が警告を表示しません:
public IdGenerator ClientIdGenerator
{
get
{
if (clientIdGenerator == null)
lock (_syncRoot)
{
if (clientIdGenerator != null)
return clientIdGenerator;
clientIdGenerator = ClientIdPrefix != null ? new IdGenerator(ClientIdPrefix) : new IdGenerator();
}
return clientIdGenerator;
}
}
は、最初の例に何か問題ですか、「間違った」という警告を表示するのR#のですか?
あなたの最初のバージョンはうまく動作するはずです。このケースでは、resharperコード解析エンジンが誤解を招くと強く思っています。 –
私もそう思った...ありがとう! – musium