我使用谓词构建器,并且根据用户输入,可以针对2种对象类型中的一种调用谓词或
而不是:
var personPredicateBuilder = PredicateBuilder.False<Person>
var animalPredicateBuilder = PredicateBuilder.False<Animal>
有没有办法让对象类型动态化?
是的,MyObject = Animal,
var predicate = PredicateBuilder.False<MyObject>
答案 0 :(得分:1)
您可以使用动态声明。
dynamic e = GetEmployee();
您无需强制转换或声明类型Employee。运行时接管然后搜索并允许使用属性进行导航。
e.GetSalary();
例如。
答案 1 :(得分:0)
是的,请使用Generic in C#
通过使用泛型,您可以定义谓词,如
PredicateBuilder.False<T>
和T can be Person/Animal
,无论你设计的是什么
编辑1
T可以是任何东西,在您的场景中它可以是一个简单的类类型,也可以是具有PredicateBuilder所需的最小属性集的自定义对象
public class YourClass
{
Public static <returnType> YourFunction<T>
{
//someAction
}
}
//YourObject can be anything Person/Animal
var predicate = YourClass.YourFunction<YourObject>();
因此,您不需要在此方案中定义T
虽然你可以限制T喜欢
class MyClass<T, U>
where T : class
where U : struct
{ }
答案 2 :(得分:-1)
这样做的方法是使用开关盒或工厂模式。