Stack overflow error in C# - but how to fix it?

前端 未结 5 1185
旧时难觅i
旧时难觅i 2021-01-05 07:50

I\'ve run into a really interesting runtime bug which generates a rogue stack overflow.

I\'ve defined a structure as follows:

public enum EnumDataTy         


        
5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-05 08:12

    As others have said, the stack overflow occurs because your property setter is just calling itself. It may be simpler to understand if you think of it as a method:

    // This obviously recurses until it blows up
    public void SetDataType(long value)
    {
        SetDataType(value);
    }
    

    As I understand it, you're trying to create normal properties but with a default value, right?

    In that case, you need backing variables which are set by the setters - and the getters should return those variables, too. It's the variables which should get default values:

    private long dataSize = 0;
    public long DataSize {
      get { return dataSize; }
      set { dataSize = value; }
    }
    
    private EnumDataType dataType = EnumDataType.Apple;
    public EnumDataType DataType { 
      get { return dataType; }
      set { dataType = value; }
    }
    

    Alternatively, use automatic properties but set the defaults in your constructor:

    public long DataSize { get; set; }
    public EnumDataType DataType { get; set; }
    
    public DataRequest()
    {
        DataSize = 0; // Not really required; default anyway
        DataType = EnumDataType.Apple;
    }
    

提交回复
热议问题