commandlineparser / commandlineparser/commandline
Immutable record types are not treated as immutable
- Linguagem predominante
- C#
- Estrelas
- 4.8k
- Forks
- 478
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
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'](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/record#immutability):
```c#
public sealed record MyRecord(
string property1,
int property2,
object propertyEtc
)
{}
```
This would actually generate a following class:
```c#
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()` 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.
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Direção de pesquisa
Start by reproducing the failure with ParseArguments() using the immutable C# record shown in the issue. Trace how parsing constructs the target type and handles its init-only properties, then verify that the same record parses without a parameterless constructor and no longer raises MissingMethodException.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- csharp
- Domínio
- cli
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100