Skip to content

Incorrect FieldType/GetElementType() result for array-typed fields #1624

Open
@frobijn

Description

@frobijn

Library/API/IoT binding

Interpreter or MDP

Visual Studio version

.NET nanoFramework extension version

Target name(s)

All

Firmware version

Nanoclr.exe 1.1.6

Device capabilities

No response

Description

The .NET and nanoFramework results for FieldInfo.FieldType and Type.GetElementType() are different for a field that has an array as type:

public class Test
{
    public byte[] data;
}

public void TestMethod()
{
    Test test = new() { data = [] };

    Console.WriteLine(test.data.GetType().FullName);
    // returns "System.Byte[]"

    Console.WriteLine(test.data.GetType().GetElementType()?.FullName ?? "-");
    // returns "System.Byte"

    Console.WriteLine(typeof(Test).GetField("data").FieldType.FullName);
    // returns "System.Array" - in .NET this is also "System.Byte[]"

    Console.WriteLine(typeof(Test).GetField("data").FieldType.GetElementType()?.FullName ?? "-");
    // returns "-"  - in .NET this is "System.Byte"
}

This makes it impossible to use reflection to assign an array, e.g., in deserialization code.

How to reproduce

Run TestMethod() on any target.

Expected behaviour

No response

Screenshots

No response

Sample project or code

No response

Aditional information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions