gpt4 book ai didi

.net - 为什么使用表达式树

转载 作者:行者123 更新时间:2023-12-04 16:23:29 26 4
gpt4 key购买 nike

我不确定我为什么要阅读表达式树,但我是。因此,我不了解该对象,也不了解它的使用地点或方式。

在此处阅读其他问题,例如 What are Expression Trees and how do you use them and why would you use them? (以及他们引用的链接),我现在更好地理解了表达式树,但是,我仍然不知道为什么要使用它。

我看到的唯一例子是 Linq to SQL 之类的东西 - 但是当你进一步研究它时,它实际上似乎更多地是关于它与 IQueryable<T> 一起使用的。界面。

表达式树是否仅与 IQueryable 结合使用(使用)?界面?

最佳答案

表达式树通常用于在运行时动态生成代码。
假设您必须创建许多未知类型的实例。
您可以使用反射创建它们,但性能会很差,或者您可以创建表达式树并将其编译为方法。
该方法的性能与您正在编译它的性能相同
使用 Visual Studio 。

public static class TypeFactory
{
private static Dictionary<Type, object> dictionary = new Dictionary<Type, object>();

public static Func<TType> CreateFactory<TType>() {
object factory;
var typeofType = typeof(TType);

if (dictionary.TryGetValue(typeofType, out factory)) {
return (Func<TType>)factory;
}

return CreateCachedFactory<TType>(typeofType);
}

private static Func<TType> CreateCachedFactory<TType>(Type typeofType) {
var ctorInfo = typeofType.GetConstructor(Type.EmptyTypes);
var lambdaExpression = Expression.Lambda<Func<TType>>(Expression.New(ctorInfo));
var factory = lambdaExpression.Compile();

dictionary.Add(typeofType, factory);

return factory;
}
}

public class MyClass
{
}

static class Program
{

static void Main() {
var myClassFactory = TypeFactory.CreateFactory<MyClass>();
var instance = myClassFactory();

Console.WriteLine(instance.GetType().FullName);
}
}

在幕后表达式树使用 lcg 或轻代码生成
使用难以理解的 Reflection.Emit 构造方法,因此您可能会说表达式树也是代码生成的抽象。

关于.net - 为什么使用表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com