Predpokladajme, že mám niekoľko rôznych record
-typy s common interface, a to takto:
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; }
}
Môj cieľ je písať funkciu, ak chcete aktualizovať Značku nehnuteľnosti prostredníctvom záznam clonation.
Teraz, ak typu boli známe, mohol by som napísať niečo takéto:
private Rec2 Update(Rec2 rec, string tag)
{
return rec with { Tag = tag };
}
Avšak, chcel by som sa napísať veľa preťažením, takže som sa opýtať, či je tu viac všeobecný spôsob, ako dosiahnuť to. Napríklad, ja by som v pokušení napísať ako:
private TRec Update<TRec>(TRec rec, string tag) where TRec : IFoo
{
return rec with { Tag = tag };
}
ale, že nebudete zhromažďovať, pretože TRec
môže byť čokoľvek (class
, struct
atď.), nie len record
kde môžem použiť with
ziskov a strát. Mimochodom, nie je to record
-obmedzenie by som mohol použiť.
Tak, existuje riešenie? je to niečo očakávať, že bude riešiť v budúcnosti?
Ako bonus otázku (len kvôli zvedavosti), prečo record
-preložené triedy nie je označené ako špeciálne rozhranie, aby with
výkaz práce proti?