提问人:Silas 提问时间:7/26/2023 更新时间:7/26/2023 访问量:34
匿名对象作为泛型类型
Anonymous object as generic type
问:
我有以下通用接口:
public interface IDatabaseEntity<out T>
{
public T GetKey();
}
现在,我定义了几个实体,它们都实现了这个接口。举个例子:
public class Player : IDatabaseEntity<Guid>
{
public Guid Id { get; set; }
// Other fields...
public Guid GetKey() => Id; // Implement the interface
}
这一切都很好,但现在我有一个由多个字段唯一定义的实体。因此,我需要以下一些东西:
public class SessionRecord : IDatabaseEntity<{Guid GameId; Guid PlayerId; DateTimeOffset StartDate}>
{
public Guid GameId { get; set; }
public Guid PlayerId { get; set; }
public DateTimeOffset StartTime { get; set; }
public DateTimeOffset? EndTime { get; set; }
public object GetKey() => new { GameId, PlayerId, StartTime }; // Implement the interface
}
基于这个答案,我相信这样的事情可能是可能的,因为编译器因此可以区分“对象”和匿名类型。
如何使接口中的方法返回匿名对象,以及 Guids 或字符串等?
答:
2赞
Peter
7/26/2023
#1
如果能像这样创建一个模型,那就太好了
public class TestModel {
public Guid GameId;
public Guid PlayerId;
public DateTimeOffset StartDate;
}
并像这样使用它
public class SessionRecord : IDatabaseEntity<TestModel>
{
public Guid GameId { get; set; }
public Guid PlayerId { get; set; }
public DateTimeOffset StartTime { get; set; }
public DateTimeOffset? EndTime { get; set; }
public TestModel GetKey() => new TestModel(); // Implement the interface
}
编辑 18:63
public class SessionRecord : IDatabaseEntity<object>
{
public Guid GameId { get; set; }
public Guid PlayerId { get; set; }
public DateTimeOffset StartTime { get; set; }
public DateTimeOffset? EndTime { get; set; }
public object GetKey() => new { GameId, PlayerId, StartTime }; // Implement the interface
}
评论
0赞
Silas
7/26/2023
一般来说,这将是答案,但出于某种利基原因,我确实要求该对象可以传递给 EFCore,作为我可以唯一标识数据库实体的对象。类或其他包装器在那里不起作用id
评论