如何使对象类型动态化

时间:2016-05-31 05:33:19

标签: c#

我使用谓词构建器,并且根据用户输入,可以针对2种对象类型中的一种调用谓词或

而不是:

var personPredicateBuilder = PredicateBuilder.False<Person>
var animalPredicateBuilder = PredicateBuilder.False<Animal>

有没有办法让对象类型动态化?

是的,

MyObject = Animal,

var predicate = PredicateBuilder.False<MyObject>

3 个答案:

答案 0 :(得分:1)

您可以使用动态声明。

dynamic e = GetEmployee();

您无需强制转换或声明类型Employee。运行时接管然后搜索并允许使用属性进行导航。

e.GetSalary(); 

例如。

答案 1 :(得分:0)

是的,请使用Generic in C#

通过使用泛型,您可以定义谓词,如

PredicateBuilder.False<T>

T can be Person/Animal,无论你设计的是什么

有关Predicate<T> Delegate

的更多信息

编辑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)

这样做的方法是使用开关盒或工厂模式。