嵌套结构作为类中的成员

时间:2012-07-12 20:27:35

标签: c# .net class struct

我正在编写一个包含90个整数变量的类。基本上有10个但每个都有3x3属性,使它们成为90.我会进一步解释它。

所以我拥有的10个变量是:v0,v1,v2,...,v9。每个城市,县和州都有3个不同的值。此外,每个都有过去,现在和未来的3个不同的值。

因此,典型值为:v3.City.Future或v7.State.Past或v8.County.Present。

我正在考虑实现一个类,每个变量有10个结构,然后每个结构都有3个嵌套结构(用于城市,县和州),每个结构都有3个整数变量用于过去,现在和将来

这仍处于概念阶段。我试着采用上面提到的方法,但它没有用。请随时提出任何建议。

感谢。

更新:

以下是代码段:

public class MyClass
{
    public MyVariable myvariable;
}

public struct MyVariable
{
    public struct National
    {
        public int Past { get; set; }
        public int Present { get; set; }
        public int Future { get; set; }
    }
    ...
}

现在,当我实例化该类并访问该成员(myclass.myvariable.National.Past)时,它不会获得该成员。

3 个答案:

答案 0 :(得分:14)

以下是答案:

public struct PeriodVars
{
    public int Past { get; set; }
    public int Present { get; set; }
    public int Future { get; set; }
}

public struct VarStruct
{
    public PeriodVars City;
    public PeriodVars County;
    public PeriodVars State;
}

现在课程将是:

public class MyClass
{
    public VarStruct v0;
    public VarStruct v1;
    ...
}

一旦我实例化了一个类的对象,我可以将它引用为:

objMyClass.v0.City.Past = 111;

除了批评之外,我在这里发布的帮助并不多。

通常,一个人无法理解被视为另一个人无法解释。我花了15-20分钟写出问题,人们在不到30秒的时间内开始投票。

答案 1 :(得分:3)

你的“问题”根本不是一个问题,但这里有一套简单的类来完成。我使用了类而不是结构,因为如果使用结构,你需要了解一些“陷阱”。

除非,否则如果您描述“它无法正常工作”,我打赌您的问题实际上是您正在尝试使用结构。

请发布您的代码,并描述您的症状,以便我们更好地为您提供帮助。

public class Foo<T>
{
    public T Future;
    public T Present;
    public T Past;
}

public class Bar
{
    public Foo<string> City;
    public Foo<string> State;
    public Foo<string> Country;
}

public class Top
{
    public Bar v0;
    public Bar v1;
    //...
    public Bar v2;
}

答案 2 :(得分:3)

看起来您正在根据您的评论混合类型和实例:

假设您的MyVariable看起来如下:

public struct MyVariable
{
    public struct National
    {
       public int Past;
    }
  public National ValueForNational;
}

myclass.myvariable.National - 它是一种类型(不会编译)

myclass.myvariable.National.Past - 它是一个类型的成员(不会编译)

myclass.myvariable.ValueForNational - 是MyClass'变量中的MyVariable成员的值(将编译)

myclass.myvariable.ValueForNational.Past - 是你可能想要的......