I have two code snipets, one in VB and the other in C#. Why does the visual
basic example not change the structure member "x", but the C# code does? I
need the visual basic code to work as I am a visual basic coder, but I don't
know what is wrong. Is there a bug in visual basic.net? Please help!
'VB Code
Imports System
Imports System.Reflection
Structure Foo
Public x As Integer
End Structure
Class Test
Shared Sub Main()
Dim f As New Foo
f.x = 10
Dim fi As FieldInfo = GetType(Foo).GetField("x")
Dim o As Object = f
fi.SetValue(o, 3)
f = CType(o, Foo)
Console.WriteLine(f.x)
End Sub
End Class
//C#
using System;
using System.Reflection;
struct Foo
{
public int x;
}
Class Test
{
static void Main()
{
Foo f = new Foo();
f.x = 10;
FieldInfo fi = typeof(Foo).GetField("x");
object o = f;
fi.SetValue (o, 3);
f = (Foo)o;
Console.WriteLine (f.x);
}
}

Signature
Erol
Bruce Wood - 15 Dec 2004 01:44 GMT
I took a long, hard look at your code but I can't see any difference
between the two. The only thing I can suggest is to use ildasm to look
at the code these two generate to see if there is some crucial
difference. Perhaps VB is doing boxing and unboxing differently when
you say fi.SetValue(o, 3). I would have to disassemble it to find out.
That said, you do realize that having setters on structure fields is an
extremely dodgy thing to do in .NET? It can lead to all sorts of
unexpected behaviour. I'm wondering if you're a seasoned .NET
programmer trying to do something clever, or someone learning the
framework who maybe chose struct when a class would have been a better
idea?