我无法使用本地变量初始化内部结构C#。

3

我尝试使用谷歌搜索答案,但没有成功。 好的,我有一个像这样的结构:

struct TestStruct 
        {   public int n;
            public struct _InnerStruct  {   public int m;   }   
            public  _InnerStruct InnerStruct;   
        }

我可以将值分配给本地变量中的n字段

static void  Main ()    
    {       
        int SomeLOCALvar = 1;
        TestStruct TEST_STRUCT = new TestStruct () { n = SomeLOCALvar };
    }

我的问题是我不明白如何使用m字段执行完全相同的操作。 为什么像这样的代码不能编译:

TestStruct TEST_STRUCT = new TestStruct () { n = SomeLOCALvar, .InnerStruct.m = SomeLOCALvar };

正确的语法是什么?

1个回答

3

好的,以下代码应该可以正常运行:

TestStruct TEST_STRUCT = new TestStruct { n = SomeLOCALvar, InnerStruct = new _InnerStruct { m = SomeLOCALvar } };

然而,坦白地说这样做是一个非常糟糕的想法。值类型(结构体)几乎总是应该是不可变的;一个有公共可变字段的结构体非常脆弱,它会导致混乱和代码失效。

在我看来,这些应该是readonly struct,具有只读属性和构造函数。例如:

readonly struct InnerStruct {
    public int M { get; }
    public InnerStruct(int m) => M = m;
}
readonly struct TestStruct 
{
    public int N { get; }
    public InnerStruct InnerStruct { get; }
    public TestStruct(int n, int m)
    {
        N = n;
        InnerStruct = new InnerStruct(m);           
    }
}

(理想情况下,它们还应该重写 EqualsGetHashCodeToString 方法,以防止装箱。)

谢谢,你帮了我很多。 别担心,我写的代码只是给自己看的,不会有人看到它 :) 我是个初学者,自学成才,所以第二个例子对我来说比第一个更令人困惑:) 希望这很快也会变得熟悉。 - Лёха Майтрейд
@ЛёхаМайтрейд 说得对,但这是一个重要的概念。如果值类型的复制语义不是100%清楚,请使用class-您将犯更少的错误。问题中显示的可变struct具有许多微妙的错误可能性。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接