Skip to content

Immutable record types are not treated as immutable #777

@mikhail-barg

Description

@mikhail-barg

C# 9.0 syntax allows now to declare reference types as 'records' which is a nice syntax sugar for (immutable) data-container classes. There's a way to declare a record type as 'immutable':

public sealed record MyRecord(
  string property1,
  int property2,
  object propertyEtc
)
{}

This would actually generate a following class:

public sealed class MyRecord 
{
  public string property1 {get; init;}
  public int property2 {get; init;}
  public object propertyEtc {get; init}

  public MyRecord(string property1,  int property2, object propertyEtc)
  {
     this.property1 = property1;
     this.property2 = property2;
     this.propertyEtc = propertyEtc;
  }
 //some other code, like Equals()
}

The problem is that ParseArguments<MyRecord>() would fail with System.MissingMethodException: No parameterless constructor defined for type 'MyRecord '. (which there's really none).

While I could declare a prarmeterless constructor for such record, it would be really great to have such classes supported as-is.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions