我尝试将几个Dto
数组 Package 在一个 Package 器中,如下所示:
public sealed record SomeWrapper<T>(T[]? L1, T[]? L2, T[]? L3)
: SomeWrapper(L1, L2, L3) where T : Dto;
public record SomeWrapper(
Dto[]? L1,
Dto[]? L2,
Dto[]? L3
);
字符串
因为我希望能够初始化一个SomeWrapper
的数组,其中T可以是不同的,即:
List<SomeWrapper> someWrappers = new List<SomeWrapper>()
someWrappers.Add(new SomeWrapper<SomeDto>());
someWrappers.Add(new SomeWrapper<SomeOtherDto>());
return someWrappers;
型
但是,我得到以下错误:Record member 'L1' must be a readable instance property or field of type 'T[]' to match positional parameter 'L1'
我相信这段代码应该可以工作,所以我不确定这里出了什么问题。这是Dto
的样子:
public interface Dto<T> : Dto where T : Entity.Entity;
public interface Dto
{
string Id { get; init; }
};
型Entity
目前只是一个空接口。
我无法解释这个错误,也不知道如何问这个问题(接受建议)
1条答案
按热度按时间bvk5enib1#
让我简化你的问题,当你有:
字符串
编译器会自动为相同的名称生成一个公共属性:
型
现在,在派生记录中,你声明了一个同名的属性:
型
编译器将假定
L1
是基类定义的属性。然而,由于您声明了不同的类型,它不再起作用。此错误消息有点误导,因为它建议您修改基类的L1
属性的类型。无论如何,你需要解决这个冲突,我想你不想遇到意外的错误。你需要手动声明一个新的属性:
型