[英]C# Assign/cast to object fields in a struct
對這個新手問題很抱歉,我對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;
最后一行無法編譯:因為它是一個“ foreach迭代變量”,所以無法修改“ command”的成員?如何將OutParam字段分配給另一個ServerAttributes結構?
這是外部for-each循環:
foreach (MT5Command Cmd in mCommandQueue.GetConsumingEnumerable())
{
...
}
謝謝,於爾根
在這種情況下,您不能這樣做。 您尚未提供完整的代碼段,但我懷疑是這樣的:
foreach (MT5Command command in someCollection)
{
// Code as posted
}
現在,由於MT5Command
是一個結構,因此您將獲得someCollection
中任何值的副本 。 幾乎可以肯定,更改屬性不會執行您想要的操作。 編譯器通過使command
變量為只讀來保護您自己。 您可以這樣做:
MT5Command copy = command;
copy.OutParam = SrvAttributes;
...但是我強烈懷疑那不是你想要的。
通常,擁有像您想到的那樣的可變結構是一個非常糟糕的主意 -聽起來並不應該首先是一個結構。
欲獲得更多信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.