据我所知,表达式树是 immutable那么为什么编译器不对静态表达式(如字符串文字)使用相同的对象引用?
要澄清问题,请参阅示例:
static void Main(string[] args)
{
Test(p => true);//2637164
Test(p => true);//3888474
Test("true");//-292522067
Test("true");//-292522067
Console.ReadKey();
}
public static void Test(Expression<Func<string,bool>> exp)
{
Console.WriteLine(exp.GetHashCode());
}
public static void Test(string str)
{
Console.WriteLine(str.GetHashCode());
}
最佳答案
As I know Expression trees is immutable so why compiler didn't use same object reference for a static expression, like string literals?
规范说允许但不要求编译器驻留相同的 lambda。
字符串文字由运行时免费驻留;编译器开发人员无需为此付出任何代价。
我没有实习表达式树的原因是因为我们每天都在为不切实际的场景进行毫无意义的不必要的“优化”,而这些场景实际上没有节省任何宝贵的资源,而 Visual Studio 会推迟它的日程安排的那一天。我们将这些时间用于实际优化。
关于c# - 为什么编译器不对静态表达式树使用相同的对象引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47258305/