我无法用局部变量 C# 初始化内部结构

I can't initialize the internal structure with local variables C#

老实说,我尝试用谷歌搜索答案,但没有成功。 好的,我有这样的结构:

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 };

正确的语法是什么?

好吧,以下应该有效

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

但是,坦率地说,这样做是一个非常糟糕的主意。值类型(结构)应该几乎总是不可变的;像这样具有 public 可变字段的结构 难以置信地 脆弱,它 导致混乱和损坏的代码。

IMO,这些应该是 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,以防止装箱)