Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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中使用对象属性初始化时的依赖字段#_C#_Properties_Object Initialization - Fatal编程技术网

C# 在C中使用对象属性初始化时的依赖字段#

C# 在C中使用对象属性初始化时的依赖字段#,c#,properties,object-initialization,C#,Properties,Object Initialization,今天我很惊讶地发现我不能做到以下几点 public class NumberyStuff { public List<int> Numbers { get; set; } public int Total { get; set; } } var numbers = new NumberyStuff { Numbers = new List<int>{ 1, 2, 3, 4, 5 }, Total = Numbers.Sum() //

今天我很惊讶地发现我不能做到以下几点

public class NumberyStuff
{
    public List<int> Numbers { get; set; }
    public int Total { get; set; }
}


var numbers = new NumberyStuff
{
     Numbers = new List<int>{ 1, 2, 3, 4, 5 },
     Total = Numbers.Sum() // "Numbers does not exist in the current context"
}
公共类编号Stuff
{
公共列表编号{get;set;}
公共整数总计{get;set;}
}
var numbers=新的NumberyStuff
{
数字=新列表{1,2,3,4,5},
Total=Numbers.Sum()/“当前上下文中不存在数字”
}

我只是缺少一些语法吗?或者这是不可能的?

这是不可能的,您需要移动对象结构的总放线:

var numbers = new NumberyStuff
{
     Numbers = new List<int>{ 1, 2, 3, 4, 5 }         
}
numbers.Total = numbers.Numbers.Sum();
var numbers=newnumberstuff
{
数字=新列表{1,2,3,4,5}
}
numbers.Total=numbers.numbers.Sum();
如果您实际反汇编并查看生成的代码以初始化Numbers属性,您将看到这一切都是通过temp变量完成的

NumberyStuff <>g__initLocal0 = new NumberyStuff();
List<int> <>g__initLocal1 = new List<int>();
<>g__initLocal1.Add(1);
<>g__initLocal1.Add(2);
<>g__initLocal1.Add(3);
<>g__initLocal1.Add(4);
<>g__initLocal1.Add(5);
<>g__initLocal0.Numbers = <>g__initLocal1;
NumberyStuff numbers = <>g__initLocal0;
NumberyStuff g_uuinitlocal0=newnumberystuff();
List g_uuinitlocal1=新列表();
g_uuinitlocal1.Add(1);
g_uuinitlocal1.Add(2);
g_uuinitlocal1.Add(3);
g_uuinitlocal1.Add(4);
g_uuinitlocal1.Add(5);
g_uuinitlocal0.Numbers=g_uinitlocal1;
NumberyStuff numbers=g_uuinitlocal0;

虽然我认为没有技术原因不能从g_uuinitlocal1变量生成总和,但在将其放入numbers对象之前,没有语法可供您访问。

这是不可能的,您需要移动对象构造的总设置:

var numbers = new NumberyStuff
{
     Numbers = new List<int>{ 1, 2, 3, 4, 5 }         
}
numbers.Total = numbers.Numbers.Sum();
var numbers=newnumberstuff
{
数字=新列表{1,2,3,4,5}
}
numbers.Total=numbers.numbers.Sum();
如果您实际反汇编并查看生成的代码以初始化Numbers属性,您将看到这一切都是通过temp变量完成的

NumberyStuff <>g__initLocal0 = new NumberyStuff();
List<int> <>g__initLocal1 = new List<int>();
<>g__initLocal1.Add(1);
<>g__initLocal1.Add(2);
<>g__initLocal1.Add(3);
<>g__initLocal1.Add(4);
<>g__initLocal1.Add(5);
<>g__initLocal0.Numbers = <>g__initLocal1;
NumberyStuff numbers = <>g__initLocal0;
NumberyStuff g_uuinitlocal0=newnumberystuff();
List g_uuinitlocal1=新列表();
g_uuinitlocal1.Add(1);
g_uuinitlocal1.Add(2);
g_uuinitlocal1.Add(3);
g_uuinitlocal1.Add(4);
g_uuinitlocal1.Add(5);
g_uuinitlocal0.Numbers=g_uinitlocal1;
NumberyStuff numbers=g_uuinitlocal0;

虽然我想没有任何技术原因可以让您无法从g_uuinitlocal1变量生成sum,但在将它放入numbers对象之前,没有语法可供您访问。

尽管看起来有点像,但初始值设定项不是一个构造函数,并且在调用例程的上下文中,因此没有
这个
指针。你必须写下如下内容:

// This doesn't work either.
var numbers = new NumberyStuff  
{  
     Numbers = new List<int>{ 1, 2, 3, 4, 5 },  
     Total = numbers.Numbers.Sum()   
}  
//这也不行。
var numbers=新的NumberyStuff
{  
数字=新列表{1,2,3,4,5},
总数=个数。个数。总和()
}  

除了,
数字
尚未赋值。

尽管看起来有点像,但初始值设定项不是一个ctor,并且在调用例程的上下文中,因此没有
指针。你必须写下如下内容:

// This doesn't work either.
var numbers = new NumberyStuff  
{  
     Numbers = new List<int>{ 1, 2, 3, 4, 5 },  
     Total = numbers.Numbers.Sum()   
}  
//这也不行。
var numbers=新的NumberyStuff
{  
数字=新列表{1,2,3,4,5},
总数=个数。个数。总和()
}  

除了,
编号
尚未分配。

我确实发现
总计
属性不合逻辑。为什么要存储一个可以计算的值?如果使用
Total
setter会发生什么情况?@thelost:这只是一个例子,我确实发现
Total
属性不合逻辑。为什么要存储一个可以计算的值?如果你使用
Total
setter会怎么样?@thelost:这只是一个很烂的例子。你知道为什么编译器不处理这个吗?Lippert或其他编译器大师有没有写过关于它的博客?你知道吗?@FearofahackPlanet如果你的一个属性依赖于另一个属性,为什么不在类中强制这种关系,而不是将这种责任推给调用方?这很可能就是你的问题的答案,这太糟糕了。你知道为什么编译器不处理这个吗?Lippert或其他编译器大师有没有写过关于它的博客?你知道吗?@FearofahackPlanet如果你的一个属性依赖于另一个属性,为什么不在类中强制这种关系,而不是将这种责任推给调用方?这很可能就是你问题的答案