我试图在像这样的通用方法中使用通用:

public Boolean Eval<T>( )
{
 var firstOrDefault = db.Class.OfType<T>().FirstOrDefault();
}


所有都有共同的属性,例如“ SupplierId”,因此通常可以做到:

public Boolean Eval<T>( )
{
  var firstOrDefault = db.Class.OfType<T>().FirstOrDefault(r=>r.SupplierId == intSupplierId);
}


但是,智能将对此抱怨,因为它不知道包含“ SupplierId”属性。是否有可能做到这一点?如果可以,怎么办?

非常感谢。

最佳答案

您可以添加where子句。您的供应商ID必须存在于您的基类中。
同样,所有类都需要从您的基类扩展。 Constraints on Type

public Boolean Eval<T>() where T : MyBaseClass
{
    var firstOrDefault = db.Class.OfType<T>()
                                 .FirstOrDefault(r => r.SupplierId == intSupplierId);
}




class MyBaseClass
{
    public int SupplierId { get; set; }
}




class MyCustomClass : MyBaseClass
{
    //Extended class
}




另外,您可以具体化。

public Boolean Eval()
{
    var firstOrDefault = db.Class.OfType<MyClass>()
                                 .FirstOrDefault(r => r.SupplierId == intSupplierId);
}

10-08 06:46