所以我有一个接受泛型类型参数的类,如果类型参数是给定类型的子类,它会做一些特殊处理。
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 和内置类型,因此在我的情况下,泛型约束不是合适的解决方案。