有人能用c#解释一下这个语法吗?

本文关键字:一下 语法 解释 | 更新日期: 2023-09-27 18:07:52

在Java中创建对象时,我习惯了以下语法:

objectX1 = new ObjectX(some arguments);

在查看c#中的一个项目时,我遇到了以下代码:

_createSample = new Func<SampleBase>[]
{
    () => new SkeletonMappingSample();
}
我需要向我解释两件事。首先,如何创建一个没有括号和参数列表的对象,而不是使用{}with表达式工作?

接下来,{}之间的表达式是什么意思?

有人能用c#解释一下这个语法吗?

您找到的代码:

_createSample = new Func<SampleBase>[]
{
    () => new SkeletonMappingSample();
}

只是一个用于创建数组然后用值初始化它的符号。

实际上与

相同
_createSample = new Func<SampleBase>[1];
_createSample[0] = () => new SkeletonMappingSample();

除了在{ }版本中,编译器根据在{ }

之间添加的元素数量来设置边界。对象:

SomeClass abc = new SomeClass()
{
   SomeProperty = "SomeValue",
}

只是一种创建对象然后设置一些属性值的方法,它实际上与:

SomeClass abc = new SomeClass();
abc.SomeProperty = "SomeValue";

下面的代码创建了一个数组Func: _createSample = new Func<SampleBase>[]

然后它实例化一个lambda表达式() => new SkeletonMappingSample()作为其中的唯一元素,使用集合初始化器(注意大括号,分号是可选的):

{
    () => new SkeletonMappingSample();
}

这个表达式将实例化一个新的SkeletonMappingSample:

var newMappingSample = _createSample[0]();