Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# list of const struct

I want to create a look-up table that can be referenced from other classes, so I am a attempting to create a list of const structures as follows:

    public struct DataRouting1
{
    public struct tParameters
    {
            private readonly bool prvFieldbus;
            private readonly int prvAddressMax;
            private readonly string prvTypeLabel;
            private readonly byte prvXTPtype;
            private readonly string prvPointLabel;
            private readonly int prvPointMin;
            private readonly int prvPointMax;
            private readonly int prvPointValue;
            private readonly int prvQuantityMax;

            public tParameters(bool Fieldbus, int AddressMax, string TypeLabel, byte XTPtype, string PointLabel, int PointMin, int PointMax, int PointValue, int QuantityMax)
            {
                this.prvFieldbus = Fieldbus;
                this.prvAddressMax = AddressMax;
                this.prvTypeLabel = TypeLabel;
                this.prvXTPtype = XTPtype;
                this.prvPointLabel = PointLabel;
                this.prvPointMin = PointMin;
                this.prvPointMax = PointMax;
                this.prvPointValue = PointValue;
                this.prvQuantityMax = QuantityMax;
            }
            public bool Fieldbus { get { return Fieldbus; } }
            public int AddressMax { get { return AddressMax; } }
            public string TypeLabel { get { return TypeLabel; } }
            public byte XTPtype { get { return XTPtype; } }
            public string PointLabel { get { return PointLabel; } }
            public int PointMin { get { return PointMin; } }
            public int PointMax { get { return PointMax; } }
            public int PointValue { get { return PointValue; } }
            public int QuantityMax { get { return QuantityMax; } }
    }
    public static readonly List<tParameters> Parameter = new List<tParameters>
    {

        new tParameters (true,  250,    "Fieldbus Digital Input",           0x80,   "Number",   1,      65535,  0,  255),
        new tParameters (true,  250,    "Fieldbus Digital Output",          0x81,   "Number",   1,      65535,  0,  255),
        new tParameters (true,  250,    "Fieldbus Input Register",          0x82,   "Number",   1,      65535,  0,  255),
              .
              .
              .
    };
}

I use it as follows:

    if (DataRouting1.Parameter[Index].Fieldbus == false)
      .
      .

This compiles correctly, but when I ran it the program crashed, saying it had a memory overflow. I stepped through the program and found that when I stepped into to above line the application called the line

                public bool Fieldbus { get { return Fieldbus; } }

and remained there indefinitely. Stepping toggles between highlighting the '{' after 'get' and 'return Fieldbus', so it apparently enters an infinite loop.

Any ideas what I am doing wrong?

like image 322
user1358841 Avatar asked Mar 22 '23 19:03

user1358841


2 Answers

You need to return your private backup variable this.prvFieldbus instead. This is also true for your other properties.

like image 148
Heslacher Avatar answered Apr 01 '23 15:04

Heslacher


public bool Fieldbus { get { return prvFieldbus; } }
like image 37
Stephen Avatar answered Apr 01 '23 14:04

Stephen