1

クラス Student があり、その中にプロパティStudentnameとがありaddressます。

また、学生をフィルタリングするための以下のような静的関数もありますaddress(living area)

public static List<T> FilterByAddress<T>(List<T> StudentList, string address )
    {
       Type typeParameterType = typeof(T); // it is returning Student 
       StudentList = StudentList.FindAll(x => x.address == address );            
       return StudentList;
    } 

コード「x.address」のこの部分でエラーが発生します。これはエラー 42 'T' に 'Studentname' の定義が含まれておらず、型 'T' の最初の引数を受け入れる拡張メソッド 'Studentname' が見つかりませんでした(using ディレクティブまたはアセンブリ参照がありませんか?)

Tを学生クラスとして認識させることでこれを解決するにはどうすればよいですか?

4

3 に答える 3

4

コメントに基づいて更新:

T は異なる場合がありますが、必ずしも Student である必要はありません。プロパティ Address を持つ以外のクラスである必要があります。

ジェネリックはこのようには機能しません。Address単一のメソッドを使用して複数のクラスの共通プロパティにアクセスする場合は、それらすべてにIHasAddress(ひどい名前) のようなインターフェイスを実装させてから、メソッドに次のような一般的な制約を定義する必要があります。where T : IHasAddress

元の答え

にする必要がある場合はStudent、メソッドをジェネリックにしないでください。

public static List<Student> FilterByAddress(List<Student> StudentList, string address )
{
   StudentList = StudentList.FindAll(x => x.address == address );            
   return StudentList;
} 
于 2013-02-19T05:08:36.313 に答える
1

問題は、T はジェネリックであり、アドレスの概念がないことです。T が少なくとも 'Student' であると言うには、コンパイラ オプションを閉じる必要があります。

public static List<T> FilterByAddress<T>(List<T> StudentList, string address ) where T: Student
    {
       Type typeParameterType = typeof(T); // it is returning Student 
       StudentList = StudentList.FindAll(x => x.address == address );            
       return StudentList;
    } 
于 2013-02-19T05:11:02.870 に答える
0

ジェネリック メソッドに制約を追加します。

public static List<T> FilterByAddress<T>(List<T> StudentList, string address )
where T:Student 
于 2013-02-19T05:09:58.610 に答える