6

SA1125 : UseShorthandForNullableTypes には次の説明があります (StyleCop 4.7 設定エディター アプリケーションから取得):

Nullable<T>内の exceptではなく、null 許容型の短縮形の使用を強制しますtypeof()

typeof()ステートメントの例外がある理由はありますか? typeof(int?)これは StyleCop 作成者の単なる好みですか、それとももっと深い理由がありますか?

編集:公式ドキュメントにはこの例外について言及されていないため、次のコードをテストしました:

var x = new Nullable<int>();
var y = new int?();
var z = typeof(Nullable<int>);
var v = typeof(int?);

結果: 最初の行のみで SA1125 警告が発生します。

編集 2 :この動作を修正するよう求める StyleCop の作業項目

4

2 に答える 2

3

実際の理由はわかりませんが (私はこのルールの開発者ではないため)、次の特定の使用法に対して警告を生成しないように設計されていると思われますtypeof

typeof(Nullable<>)

そうは言っても、これが実際の公式の理由である場合、typeof(Nullable<X>).

これはすべて仮定にすぎないことに注意してください。


編集Stylecop のソースコードから:

// Check the declaration of the generic type for longhand, but allow Nullable<> which has no shorthand

したがって、私が理解していることから、基本的にはロングハンドのジェネリック型を検索し、Nullable<>それらが許可する特殊なケースを処理します。私の知るNullable<>限り、 のコンテキストでのみ意味があるtypeof()ため、このケースの例外を作成したと思います。

于 2013-04-22T11:52:03.137 に答える
0

私の意見では、これはせいぜいバグであり、少なくとも見逃された動作です。コードには次のように記載されています。

// Check the declaration of the generic type for longhand, but allow Nullable<> which has no shorthand
if (genericType.ChildTokens.Count > 0 && Utils.TokenContainNullable(genericType.ChildTokens.First))
{
    if (genericType.Parent == null || !(genericType.Parent is TypeofExpression))
    {

Nullable<>の中でサポートしようとしているようですtypeof(Nullable<>)。ただし、このチェックは、明確な理由もなく、クローズドTypeofExpressionジェネリックを誤って除外してしまいます。

探しCheckShorthandForNullableTypesます:

http://stylecop.codeplex.com/SourceControl/changeset/view/249eed5b15ed#Project/Src/AddIns/CSharp/Analyzers/ReadabilityRules.cs

于 2013-04-22T12:43:48.530 に答える