Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否存在与FormatterServices.GetUninitializedObject()等效的表达式树?_C#_Serialization_Reflection_Internals_Linq Expressions - Fatal编程技术网

C# 是否存在与FormatterServices.GetUninitializedObject()等效的表达式树?

C# 是否存在与FormatterServices.GetUninitializedObject()等效的表达式树?,c#,serialization,reflection,internals,linq-expressions,C#,Serialization,Reflection,Internals,Linq Expressions,通常我会调用Expression.New(type),但当类型没有无参数构造函数时,这是不可能的 FormatterServices.GetUninitializedObject()如何在内部工作 调用operator new()是否比调用FormatterServices.GetUninitializeObject()快 是否存在与GetUninitializedObject等效的Expressions,或者唯一的方法是使用表达式。请调用 来自: 由于该对象的新实例被初始化为零,并且没有运行

通常我会调用
Expression.New(type)
,但当类型没有无参数构造函数时,这是不可能的

  • FormatterServices.GetUninitializedObject()
    如何在内部工作
  • 调用
    operator new()
    是否比调用
    FormatterServices.GetUninitializeObject()快
  • 是否存在与
    GetUninitializedObject
    等效的
    Expressions
    ,或者唯一的方法是使用
    表达式。请调用
来自:

由于该对象的新实例被初始化为零,并且没有运行任何构造函数,因此该对象可能不表示该对象认为有效的状态。当前方法仅应在用户打算立即填充所有字段时用于反序列化。它不会创建未初始化的字符串,因为创建不可变类型的空实例没有任何用途

因此,要回答您的问题:

  • 我研究了使用ILSpy的方法,它所做的只是一些检查,然后调用一个本机(我假设是C++)方法。我猜它只是为对象分配了足够的内存,将所有字段初始化为零/空,然后返回指向该对象的指针。没有调用构造函数
  • 假设
    new()
  • 不可以。必须使用
    表达式。调用
    ,这将返回一个
    对象
    ,如果您想对它
    表达式执行任何操作。将
    转换为您需要的对象类型

  • Operator new的速度要快得多,因为它是JIT的固有特性,也是非常非常常见的情况。