有人可以在C#中解释这种语法吗?

时间:2013-04-05 13:14:07

标签: c# syntax

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

objectX1 = new ObjectX(some arguments);

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

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

我需要向我解释两件事。 首先,如何创建没有括号和参数列表的对象,而是使用带有表达式的{}?

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

2 个答案:

答案 0 :(得分:3)

您找到的代码:

_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";

答案 1 :(得分:1)

此代码创建一个Func_createSample = new Func<SampleBase>[]

的数组

然后使用lambda expression实例化一个collection initializer () => new SkeletonMappingSample()作为其唯一元素(注意大括号,分号是可选的):

{
    () => new SkeletonMappingSample();
}

该表达式在调用时将实例化一个新的SkeletonMappingSample:

var newMappingSample = _createSample[0]();