对不起这个新手问题,我对C#很新,而且它是语义。我有以下结构:
public struct MT5Command{
public MT5CommandType Type{ get; set;}
public AutoResetEvent ThreadWaitHandle { get; set; }
public object InParam { get; set; }
public object OutParam { get; set; }
}
这段代码:
MT5Command Cmd = new MT5Command();
Cmd.Type = MT5CommandType.GetServerInformation;
Cmd.ThreadWaitHandle = waitHandle.Value;
attributes = new ServerAttributes();
Cmd.OutParam = attributes;
....
ServerAttributes SrvAttributes = new ServerAttributes();
Cmd.OutParam = (ServerAttributes)SrvAttributes;
最后一行无法编译:无法修改'command'的成员,因为它是'foreach迭代变量' 如何将OutParam字段分配给另一个ServerAttributes结构?
这是外部for-each循环:
foreach (MT5Command Cmd in mCommandQueue.GetConsumingEnumerable())
{
...
}
谢谢,Juergen
答案 0 :(得分:6)
在这种情况下你不能。你没有给出完整的片段,但我怀疑它是这样的:
foreach (MT5Command command in someCollection)
{
// Code as posted
}
现在因为MT5Command
是一个结构,你得到someCollection
中任何值的副本。无论如何,改变房产几乎肯定不会做你想要的。编译器通过将command
变量设置为只读来保护您自己。你可以这样做:
MT5Command copy = command;
copy.OutParam = SrvAttributes;
......但我强烈怀疑这不是你想要的。
作为一项规则,拥有像你所提出的那样的可变结构是非常糟糕的主意 - 并且听起来不应该是首先应该是一个结构。
了解更多信息: