Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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# 设置匿名对象的属性_C# - Fatal编程技术网

C# 设置匿名对象的属性

C# 设置匿名对象的属性,c#,C#,我以为这在c#net 2.0中是可能的 header.Cells.Add((new TableCell(){Text = "First header"})); 除非我做错了?这会产生以下错误: CS1026: ) expected 错在哪里?我不确定C#2.0。。。但在C#3.0中,您可以这样做: header.Cells.Add((new TableCell{ Text = "First header" })); 我认为您不能在2.0中设置声明中的属性。因此,您必须: TableCell

我以为这在c#net 2.0中是可能的

header.Cells.Add((new TableCell(){Text = "First header"}));
除非我做错了?这会产生以下错误:

CS1026: ) expected
错在哪里?

我不确定C#2.0。。。但在C#3.0中,您可以这样做:

header.Cells.Add((new TableCell{ Text = "First header" }));

我认为您不能在2.0中设置声明中的属性。因此,您必须:

TableCell tc=new TableCell();
tc.Text = "First header";
header.Cells.Add(tc);

属性初始值设定项语法是在C#3.0中引入的;它在C#2.0中是无效语法。

对该语法的支持是由编译器提供的,而不是.Net运行时/CLR

如果您使用的是Visual Studio 2008或更高版本,那么在针对.Net 2.0时可以很好地使用此语法,如果不是,则需要以“正常”的方式执行此操作

此外,还有一对多余的括号-使用此语法时,您可能会发现使用以下布局更容易:

header.Cells.Add(new TableCell() 
{
    Text = "First header" 
});

这不是匿名对象,
TableCell
是预定义的类型。您指的是中引入的隐式对象初始化语法,您必须以“老式”的方式进行

我很确定使用括号调用构造函数在使用此语法时仍然有效。@Andrew:有效,而且我相信是必需的。很抱歉,这会导致以下错误:“CS1526:在键入“@Andrew:我已删除了有关括号的部分后,新表达式需要()或[]。事实上,它们是允许的。@Adam:对于具有默认构造函数的类,它们是可选的。我想这可以解释为什么它不起作用,除了声明所有内容之外还有其他方法吗?@Enriquev:如果您控制类型,您可以定义一个构造函数,该构造函数接受您想要设置的任何属性的值。除此之外,不幸的是,没有。谢谢你澄清这一点,我不善于使用正确的术语,因为英语不是我的第一语言,至少代码本身就说明了这一点。这里的困惑是,“匿名对象”不是一个真正的术语。匿名类型是指在单个函数的范围内创建和使用的类型,并且在编译时没有可见的名称。匿名方法是指在另一个函数中定义且没有编译时名称的函数。据我所知,“匿名对象”没有定义。@Adam同意这一点,但我使用了OP使用的术语,因为他可能将编译器推断的类型称为“匿名对象”,因为从技术上讲,它们确实是编译器生成的类型,但一旦实例化,IMHO,将它们称为“匿名对象”并不是“错误的”(例如,一个匿名类型的实际实例)。@Brandon:我认为OP将它们称为“匿名对象”,因为没有声明显式变量来保存对
TableCell
的新引用(他将新引用直接传递给函数).@Adam啊,是的,我现在明白你的意思了。我再一次让逻辑妨碍了我的洞察力。P.S.,夏洛特欢呼。