我可以将数据从C / C ++结构编组为具有属性的C#结构吗?

我有一个C#结构,用于与某些本机代码接口。假设它看起来像这样,并且dll中有一个入口点,可用于检索该结构的值:

public struct MyNativeStruct 
{
    public double ExampleField;
}

[DllImport("SomeDll")]
public static extern MyNativeStruct GetMyNativeStruct();

该结构用于从本机dll中获取结构化值,即它在dll中镜像了一个结构。这一切都正确地进行了编组,因此我可以在.NET应用程序中很好地使用这些值。

后来,我遇到一种情况,我真的需要一个具有属性而不是字段的结构(或对象),所以我真正想要的是看起来更像这样的东西: / p>

struct MyNativeStruct 
{
    public double ExampleField { get; set; }
}

现在,我当然可以包装extern方法,该方法从dll中获取结构,然后将其转换为具有如下属性的对象:

public sealed class MyNativeclass 
{
    public double ExampleField { get; set; }
}

// Some quick and dirty function to get values from MyNativeStruct.
public static MyNativeclass GetMyNativeclass() 
{
    var nativeStruct = GetMyNativeStruct();
    return new MyNativeclass { ExampleField = nativeStruct.ExampleField };
}

但这意味着我将必须为要从dll中检索的每个本机结构创建2种类型,因此我希望可以通过某种不错的方法将本机结构编组为具有属性的.NET结构。字段。

我想也有可能先创建具有公共字段的结构,该结构由结构中的属性支持。

无论如何,我想知道是否存在某种标准的,惯用的或内置的方法来将本机结构类型编组为具有属性而不是公共字段的C#结构类型。

l36468146 回答:我可以将数据从C / C ++结构编组为具有属性的C#结构吗?

对于以后再来的人,我的解决方案是在struct字段之后添加属性(如GSerg,David Heffernan和Simon Mourier在评论中所建议的那样)。

所以我的结构现在看起来像这样:

struct MyNativeStruct 
{
    private double ExampleField;
    public double ExampleProperty => ExampleField;
}
本文链接:https://www.f2er.com/3096036.html

大家都在问