我有一个与 Entity Framework 一起使用的通用 IQueryable 扩展方法:
public static IQueryable<T> Search<T>(this IQueryable<T> source, ...)
此方法的一些用途采用
T
其中 T: IFoo
IFoo
只有一个属性:
public interface IFoo
{
string Foo { get; }
}
我想在上面的方法中添加一个 if 语句来检查 T 是否为 IFoo,如果是则使用 Foo 属性。
类似的东西:
if (typeof(IFoo).IsAssignableFrom(source.ElementType))
{
source = source.Where(x => x.Foo == "Bar");
}
显然这是行不通的,因为虽然我正在检查 T 是 IFoo,但没有强制转换,所以我无法访问 Foo。
我知道我可以有两个单独的方法,并对一个方法使用通用约束,但我更愿意用一个方法来处理这两个方法。这可能吗?