Please explain the following error on struct constructor. If i change struct to class
the erros are gone.
public struct DealImportRequest
{
public DealRequestBase DealReq { get; set; }
public int ImportRetryCounter { get; set; }
public DealImportRequest(DealRequestBase drb)
{
DealReq = drb;
ImportRetryCounter = 0;
}
}
- error CS0188: The ‘this’ object cannot be used before all of its fields are assigned to
- error CS0843: Backing field for automatically implemented property
‘DealImportRequest.DealReq’ must be fully assigned before control is returned to the caller. Consider calling the default constructor from a constructor initializer.
As the error message recommends, you can resolve this by calling the default constructor from a constructor initializer.
From the language specification:
The other (more verbose) alternative, of course, is to manually implement the properties and set the backing fields yourself in the constructor.
Do note that the struct you have there is mutable. This is not recommended. I suggest you either make the type a class (your compilation problems should go away immediately) or make the type immutable. The easiest way to accomplish this, assuming the code you have presented is the entire struct, would be to make the setters private (
get; private set;). Of course, you should also make sure that you don’t add any mutating methods to the struct afterwards that rely on private access to modify the fields. Alternatively, you could back the properties withreadonlybacking fields and get rid of the setters altogether.