CA1007: 適切な場所にジェネリックを使用します
Item | [値] |
---|---|
規則 ID | CA1007 |
カテゴリ | Microsoft.Design |
互換性に影響する変更点 | あり |
原因
外部から参照できるメソッドに System.Object 型の参照パラメーターが含まれており、包含アセンブリの対象が .NET Framework 2.0. です。
規則の説明
参照パラメーターは、ref
(Visual Basic では ByRef
) キーワードを使用して変更されたパラメーターです。 参照パラメーターに指定する引数の型は、参照パラメーターの型と正確に一致している必要があります。 参照パラメーター型から派生した型を使用するには、最初に型をキャストし、参照パラメーター型の変数に割り当てる必要があります。 ジェネリック メソッドを使用することで、型を最初に参照パラメーターの型にキャストせずに、制約の影響を受けるすべての型をメソッドに渡すことができます。
違反の修正方法
この規則違反を修正するには、メソッドをジェネリックにして、型パラメーターを使用して Object パラメーターを置き換えます。
どのようなときに警告を抑制するか
この規則による警告は抑制しないでください。
例
次の例は、非ジェネリック メソッドとジェネリック メソッドの両方として実装されている汎用スワップ ルーチンを示しています。 非ジェネリック メソッドと比較して、ジェネリック メソッドを使用することで文字列がどれほど効率的にスワップされるかに注意してください。
using System;
namespace DesignLibrary
{
public sealed class ReferenceParameters
{
private ReferenceParameters(){}
// This method violates the rule.
public static void Swap(ref object object1, ref object object2)
{
object temp = object1;
object1 = object2;
object2 = temp;
}
// This method satifies the rule.
public static void GenericSwap<T>(ref T reference1, ref T reference2)
{
T temp = reference1;
reference1 = reference2;
reference2 = temp;
}
}
class Test
{
static void Main()
{
string string1 = "Swap";
string string2 = "It";
object object1 = (object)string1;
object object2 = (object)string2;
ReferenceParameters.Swap(ref object1, ref object2);
string1 = (string)object1;
string2 = (string)object2;
Console.WriteLine("{0} {1}", string1, string2);
ReferenceParameters.GenericSwap(ref string1, ref string2);
Console.WriteLine("{0} {1}", string1, string2);
}
}
}
関連規則
CA1005: ジェネリック型でパラメーターを使用しすぎないでください
CA1010: コレクションは、ジェネリック インターフェイスを実装しなければなりません
CA1006: ジェネリック型をメンバー シグネチャ内で入れ子にしません
CA1004: ジェネリック メソッドは型パラメーターを指定しなければなりません
CA1003:汎用イベント ハンドラーのインスタンスを使用します
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示