Próbuję przekazać strukturę do sub/void, aby wypełnić dane. W języku C# to działa prawidłowo, wykonującBoks zachowuje się inaczej w C# i VB
[TestFixture]
public class Boxing
{
[Test]
public void BoxingValue()
{
var res = (object)new Test();
SomeVoid(res);
Assert.AreEqual(2, ((Test)res).Id);
}
public static void SomeVoid(object b)
{
var f = b.GetType().GetField("Id");
f.SetValue(b, 2);
}
public struct Test
{
public int Id;
}
}
Ten kod przechodzi test w języku C# w VB thoug
<Test> Public Sub StructTest()
Dim s As Object
s = CObj(New Test)
A(s)
Assert.AreEqual(2, CType(s, Test).Id)
End Sub
Public Sub A(val As Object)
Dim f = val.GetType().GetField("Id")
f.SetValue(val, 2)
End Sub
Public Structure Test
Public Id As Integer
End Structure
Czy ktoś ma wytłumaczenia dla tego ..
dziwne?
Nie rozumiem tego. Opublikuj pełny kod. Jaki jest typ 'res'? –
Tak, bez deklaracji 'res' w C#, niemożliwe jest określenie, czy kod został poprawnie przekonwertowany. Potrzebujesz dwóch brakujących linii - 'Dim s As Object' i' s = CObj (New Test) '. – Neolisk
mój zły .. powinien być tam teraz – PEtter