簡體   English   中英

C#分配/廣播到結構中的對象字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM