C# 初始化包含字节数组的结构数组

C# 初始化包含字节数组的结构数组,c#,arrays,struct,initialization,C#,Arrays,Struct,Initialization,我想初始化一个结构的数组,每个结构包含一个字节数组。我还尝试: struct a { int x; int y; byte[] z; } var b = new a[] {{0, 0, {0, 0, 0}}, {1,1, {1,1,1}}}; 构造器将使其更具组织性和可读性: var b = new a[] {{0, 0, new byte[] {0, 0, 0}}, {1,1, new byte[] {1,1,1}}}; 根据您的评论选择另一种方式 1.如果将结构字段的访问修饰符声明为

我想初始化一个结构的数组,每个结构包含一个字节数组。我还尝试:

struct a
{
int x;
int y;
byte[] z;
}

var b = new a[] {{0, 0, {0, 0, 0}}, {1,1, {1,1,1}}};

构造器将使其更具组织性和可读性:

var b = new a[] {{0, 0, new byte[] {0, 0, 0}}, {1,1, new byte[] {1,1,1}}};
根据您的评论选择另一种方式
1.如果将结构字段的访问修饰符声明为public,则 将能够使用(构造函数是一种方法)初始化它们。
2.您可以使用静态类并立即调用该对象
3.将
b
设置为全局和公共(var只是本地关键字)以便调用它 从外部(我会使用比
b
更具描述性的名称)

完整示例:

struct a
{
    int x;
    int y;
    byte[] z;

    public a(int xv, int yv, byte[] zv)
    {
        x = xv;
        y = yv;
        z = zv;
    }
}

public void Initialize()
{
    var b = new a[] {new a(0,0,new byte[] { 0,0,0}),
    new a(1,1,new byte[] { 1,1,2})};
}

使用带有某些值的常规构造函数,稍后写入数组内容:

public class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("y value of index 1 is: {0}", General.b[1].y);
        Console.ReadLine();
    }
}

public static class General
{
    public static a[] b = new a[] { new a() { x = 0, y = 0, z = new byte[] { 0, 0, 0 }},
                                    new a() { x = 1, y = 1, z = new byte[] { 1, 1, 1 }}
        };
    public struct a
    {
        public int x;
        public int y;
        public byte[] z;
    }
}

尝试
var b=newa[]{new a(){0,0,new byte[]{0,0,0}},new a(){1,1,new byte[]{1,1,1}}我试过了,运气不好。我正在移植我用C编写的代码。在C中,这个结构数组是由编译器创建的,不需要在运行时运行任何代码。我知道这可能是最好的答案,但在运行时创建它会让人觉得有点尴尬。@BingBang现在你的问题更清楚了一点,请看我的编辑。谢谢@jonathana。我将在周一试用。实际代码在结构数组中包含64个成员,每个结构成员包含一个包含256个成员的字节数组。这就是为什么我对在运行时创建它犹豫不决的原因。我收到的错误表明,由于保护级别的原因,元素无法访问
public struct A
{
    const int Size = 256;
    // mutable structs are evil. 
    public int x, y;
    // At least make the arrays (not the contents) readonly
    readonly public byte[] a;
    readonly public byte[] b;

    public A(int x, int y)
    {
        this.x = x;
        this.y = y;
        this.a = new byte[Size];
        this.b = new byte[Size];
    }
}

class Program
{
    static void Main(string[] args)
    {
        var x = new A(48, 64);
        var y = new A(32, 24);

        x.a[4] = 1;
        y.b[127] = 31;
    }
}