Vamos supor que eu tenha vários record
-tipos, com um interface comum, como segue:
record Rec1(
string Tag
) : IFoo;
record Rec2(
int Num,
string Tag
) : IFoo;
record Rec3(
bool Flag
) : IFoo
{
public string Tag { get; init; }
public double Value { get; init; }
}
// ... others ...
interface IFoo
{
string Tag { get; }
}
Meu objetivo é escrever uma função para atualizar a Tag de propriedade através do registro clonation.
Agora, se o tipo eram conhecidos, eu poderia escrever algo como isto:
private Rec2 Update(Rec2 rec, string tag)
{
return rec with { Tag = tag };
}
No entanto, eu gostaria de evitar a para escrever uma série de sobrecargas, então eu estou querendo saber se há uma forma mais genérica para o atingir. Por exemplo, eu seria tentado a escrever como:
private TRec Update<TRec>(TRec rec, string tag) where TRec : IFoo
{
return rec with { Tag = tag };
}
mas isso não vai compilar, porque TRec
poderia ser qualquer coisa (class
, struct
, etc.), não apenas um record
onde eu posso usar o with
instrução. A propósito, não há um record
-restrição de que eu poderia aplicar.
Assim, existe alguma solução? é alguma coisa a esperar para ser resolvido no futuro?
Como um bônus questão (apenas para fins de curiosidade), por um record
-traduzido classe não está marcado com uma interface especial, a fim de tornar o with
instrução de trabalho contra?