String
変数が割り当てられないようにカスタムStyleCopルールを作成していnull
ますが、問題が発生しています。
次のコードを使用すると、宣言中にString
変数が割り当てられるのを簡単に防ぐことができます。null
if (expression.ExpressionType == ExpressionType.VariableDeclarator)
{
VariableDeclaratorExpression variableDeclarator = ((VariableDeclaratorExpression)expression);
if (variableDeclarator.Initializer == null)
{
if ((parentStatement.StatementType != StatementType.Catch) &&
(parentStatement.StatementType != StatementType.Foreach))
{
this.AddViolation(parentElement, expression.LineNumber, "InitialiseVariablesOnDeclaration");
}
}
else
{
Boolean isString = false;
foreach (CsToken token in variableDeclarator.ParentVariable.Tokens)
{
if ((token.Text.Equals("String")) || (token.Text.Equals("string")))
{
isString = true;
break;
}
}
if (isString)
{
foreach (CsToken token in variableDeclarator.Initializer.Tokens)
{
if (token.CsTokenType == CsTokenType.Null)
{
this.AddViolation(parentElement, expression.LineNumber, "DoNotAssignStringsToNull");
break;
}
}
}
}
}
(このコードは、変数が宣言されたときに変数が明示的に割り当てられていることも確認することに注意してください)。
String
宣言後に割り当てられている変数をチェックするのに問題がnull
あります。StyleCopAPIは、割り当てステートメントの左側にある変数の型を見つけるメカニズムを公開していないようです。
したがって、このコードは、私が今持っているルールをトリガーします。
String someString = null;
しかし、このコードはそうではありません:
String someOtherString = String.Empty;
someOtherString = null;
現在、StyleCopバージョン4.7.19.0を使用しています。正しい方向へのポインタはありがたいことに受け取られます!