가정하자 나는 여러 가지 서로 다른 record
-형식으로 일반 인터페이스는 다음과 같다:
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; }
}
나의 목표는 함수를 작성하여 업데이트 태그 속성을 통해 기록 clonation.
지금는 경우,형식으로 알려져,내가 쓸 수 있는 무언가 이것을 좋아한다:
private Rec2 Update(Rec2 rec, string tag)
{
return rec with { Tag = tag };
}
그러나 내가 피를 쓰고 무리의 오버로드,그래서 그는지 궁금하네요가 있다면 더 많은 일반적인 방법을 달성했다. 예를 들면,나는 유혹을 쓰:
private TRec Update<TRec>(TRec rec, string tag) where TRec : IFoo
{
return rec with { Tag = tag };
}
하지만 그렇지 않은 컴파일하기 때문에, TRec
수 아무것도(class
, struct
,etc.),지 record
어디에 사용할 수 있습니다 with
문입니다. 방법으로,없 record
-제약 조건 내가 적용될 수 있습니다.
그래서,어떤 해결 방법? 그것은 아무것도 기대하는 해결해야 할까요?
보너스로 질문(단위해 호기심),는 이유 record
-번역 등이 표시 되지 않으면 특별한 인터페이스를 만들기 위해 with
문 작업에 대하여?