开发者

C# Assign/cast to object fields in a struct

Sorry for this newbie question, I'm very new to C# and it's semantics. I have the following struct:

public struct MT5Command{

    public MT5CommandType Type{ get;  set;}

    public AutoResetEvent ThreadWaitHandle { get; set; }

    public object InParam { get; set; }

    public object OutParam { get; set; }

}

And this code snippet:

MT5Command Cmd = new MT5Command();
Cmd.Type = MT5CommandType.GetServerInformation;
Cmd.ThreadWaitHandle = waitHandle.Value;
attributes = new ServerAttributes();
Cmd.OutParam = attributes;
....
ServerAttributes SrvAttributes = new ServerAttributes();
Cmd.OutParam = (ServerAt开发者_如何学Pythontributes)SrvAttributes;

The last line does not compile: Cannot modify members of 'command' because it is a 'foreach iteration variable' How is it possible to assign the OutParam field to another ServerAttributes struct?

This is the outer for-each loop:

foreach (MT5Command Cmd in mCommandQueue.GetConsumingEnumerable())
{
   ...
}

Thanks, Juergen


You can't, in this case. You haven't given the full snippet, but I suspect it's something like this:

foreach (MT5Command command in someCollection)
{
    // Code as posted
}

Now because MT5Command is a struct, you're getting a copy of whatever value is in someCollection. Changing the property almost certainly wouldn't do what you wanted it to anyway. The compiler is protecting you from yourself, by making the command variable read-only. You could do this:

MT5Command copy = command;
copy.OutParam = SrvAttributes;

... but I strongly suspect that's not what you want.

As a rule, it's a really bad idea to have mutable structs like the one you've come up with - and it doesn't sound like that should be a struct in the first place.

For more information:

  • My article on value types and reference types
  • MSDN guidelines on when it's appropriate to create a struct
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜