From @ Servy
"structs are immutable" well, no, they're not. They should be, in most cases, but they are not inherently immutable. The inherent problem here is that the property returns a copy of the struct, not a reference to the struct. If there was a syntax in C# for ref returns, then this would be possible.
Fundamentally why this will not work is that structs are immutable. Once they're made, that's it. For this reason it is not possible to partially reassign a struct. It would be like trying to swap your leg out. You can't. It's part of you, and you came with it!
I think the only thing you're going to be able to do is implement your own X and Y attributes, such that:
public double LocationX
{
get
{
return Location.X;
}
set
{
Location = new Rectangle(value,Location.Y);
}
}
You obviously need to mirror this to Y as well, but this should allow what you want (but don't expect it to be quick or efficient!)
Whilst this answers your immediate question, I would raise a few points about your model. I would consider not attempting to update the movement like this. From an OO point of view, your tank is its own object, and should be managing its own position. Give it a movement instruction, and then have it update it's own position.
e.g:
Tank.MoveRelative(10,0);
Tank.MoveAbsolute(100,100);
this allows you a little more freedom and allows the tank to validate any requests made on it based on logic you've given it.