したがって、ジェネリック型パラメーターを受け入れ、型パラメーターが特定の型のサブクラスである場合は少し特別な処理を行うクラスがあります。
IEnumerable<T> models = ...
// Special handling of MySpecialModel
if (filterString != null && typeof(MySpecialModel).IsAssignableFrom(typeof(T)))
{
var filters = filterString.Split(...);
models =
from m in models.Cast<MySpecialModel>()
where (from t in m.Tags
from f in filters
where t.IndexOf(f, StringComparison.CurrentCultureIgnoreCase) >= 0
select t)
.Any()
select (T)m;
}
しかし、私は最後の行で例外を取得しています
Cannot convert type 'MySpecialModel' to 'T'
as
キャストする代わりに使用するようにコードを変更すると、このエラーが発生します。
The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint.
ここで何が欠けていますか?
アップデート
このクラスのニーズは、struct
sや組み込み型を含む任意の型パラメーターを取ることができるため、私の場合、ジェネリック制約は適切な解決策ではありません。