无法访问静态数组 class 的嵌套 属性

Unable to access nested property of array of static class

给定:

  1. class 必须可以从另一个必须是静态的 class 内部访问(别无选择)。
  2. 给定示例中的结构,FOO class 必须是可递归的,支持项目集合的嵌套数组。
  3. FOO 必须完全可序列化,包括所有嵌套数组和包含 XML 的后续项(不使用花哨的技巧——直接序列化到 xml,这似乎只支持一个 class 并将相应地自动查找嵌套的 classes / 结构)

问题是我无法执行以下操作,因为无法访问 FOOTabItem 的属性。

// can not be static
public class TestClass : SomeFancyInheritedObject { 

    // must be static
    public static void Test() {
        FOO.FOOTabItem bar = new FOOTabItem();

        bar.Count = 100;  // This is inaccessible
    }

}

这是 class 代码,我无法使对象从 :

公开
public static class FOO {
    public static int Money { get; set; }

    public static List<FOOTab> Tabs { get; set; }


    public static struct FOOTab {
        public static List<FOOTabItem> Items { get; set; }

        public static FOOTab TabInformation { get; set; }
    }

    public static struct FOOTabItem {
        public static ItemInfo Item { get; set; }
        public static int Count { get; set; }

    }

    public static FOO() {
        Tabs = new List<FOOTab>();
        Money = 0;
    }

}

我也尝试在 FOO 中使用嵌套的 classes 而不是 struct,但这导致 FOO 抱怨我不能使用 class 作为对象参数,这是为什么我改用 struct

此代码没有语法错误。我可以公开 FOO 本身的 properties/etc 并实例化结构的 new(),但是我看不到结构的属性。

我认为这可能是一个权限问题(public / static / internal / etc),但我不确定具体要做什么来纠正这个问题。我搜索过 SO 并且存在本质上相似的问题但是它们没有提供任何关于静态 classes 内的嵌套对象列表以及如何从其他静态 classes 中正确访问它们的清晰见解。

我删除了下面代码中的所有静态关键字。在这里,bar.Count 是可访问的。

public class TestClass : SomeFancyInheritedObject 
{ 
    public static void Test() {
        FOO.FOOTabItem bar = new FOO.FOOTabItem();
        bar.Count = 100; // This is now accessible
    }
}
public class FOO {
    public int Money { get; set; }
    public List<FOOTab> Tabs { get; set; }

    public FOO() {
        Tabs = new List<FOOTab>();
        Money = 0;
    }

    public struct FOOTab {
        public List<FOOTabItem> Items { get; set; }
        public FOOTab()
        {
            Items = new List<FOOTabItem>();
        }
    }

    public struct FOOTabItem {
        public ItemInfo Item { get; set; }
        public int Count { get; set; }
    }
}

更新: 为了回应您的评论,这是我在 VS 中测试过的代码:

class Program
{
    public static void Main(string[] args)
    {
        var foo = new FOO();
        var x = new XmlSerializer(typeof(FOO));
        using (var memoryStream = new MemoryStream())
        {
            using (var writer = new StreamWriter(memoryStream))
            {
                x.Serialize(writer, foo);
            }
        }
    }
}

public class FOO
{
    public int Money { get; set; }
    public List<FOOTab> Tabs { get; set; }

    public FOO()
    {
        Tabs = new List<FOOTab>();
        Money = 0;
    }

    public class FOOTab
    {
        public List<FOOTabItem> Items { get; set; }
        public FOOTab()
        {
            Items = new List<FOOTabItem>();
        }
    }

    public class FOOTabItem
    {
        public ItemInfo Item { get; set; }
        public int Count { get; set; }
    }
}

public class ItemInfo
{
}