中級 › cannot be used as type parameter の原因と直し方 › パターン1
cannot be used as type parameter の原因と直し方
where T : IComparable<T>のような制約を満たさない型を、ジェネリックメソッドの型引数として渡そうとすると出るコンパイルエラーです。
1 class Program { 2 static T Max<T>(T a, T b) where T : System.IComparable<T> { 3 return a.CompareTo(b) > 0 ? a : b; 4 } 5 class NotComparable { } 6 static void Main(string[] args) { 7 System.Console.WriteLine(Max(________________________________________)); ^ 8 } 9 }
Program.cs(7,34): error CS0311: The type 'Program.NotComparable' cannot be used as type parameter 'T' in the generic type or method 'Program.Max<T>(T, T)'. There is no implicit reference conversion from 'Program.NotComparable' to 'System.IComparable<Program.NotComparable>'.
空欄を埋めてビルドを通す
MaxはIComparable<T>を実装した型しか受け取れません。独自クラスにその実装がなければ型引数として使えません。
次の問題