gpt4 book ai didi

c# - 访问通用实例属性

转载 作者:行者123 更新时间:2023-11-30 16:44:15 25 4
gpt4 key购买 nike

如何访问实例Id属性?我有以下代码:

public void InsertOrUpdate(Book book)
{
if (book.Id == default(int)) {

现在我想让它通用:

public class TheRepository<T> : IRepository<T> where T : class
{
public void InsertOrUpdate(T instance)
{
if (instance.Id == default(int))//How can I access Id here
{
context.Set<T>().Add(instance);

我搜索了类似的帖子,我认为我应该写类似 instance.GetType().GetProperty("Id").GetValue() 的内容,但我不知 Prop 体怎么做?

最佳答案

您可以像这样进行黑客攻击。定义一个接口(interface),它只有一个名为 Idint 类型的属性:

interface IHaveId
{
public int Id { get; set; }
}

然后说明您的实体实现了该接口(interface):

public class Book : IHaveId

最后说明在您的通用 Repository 类中使​​用的类型应该实现此接口(interface)。

public class TheRepository<T> : IRepository<T> where T : class, IHaveId
{
public void InsertOrUpdate(T instance)
{
if (instance.Id == default(int))
{
context.Set<T>().Add(instance);
}
}
}

这样做可以避免使用反射,一般来说这是非常昂贵的。此外,您的代码现在更加清晰。

关于c# - 访问通用实例属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43834764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com