c# - 在表达式中引用通用属性

标签 c# asp.net-mvc generics lambda

假设我有两张 table ,午餐和晚餐。我知道两者都包含 DateTime 属性“Time”。

如果我有一个通用方法 GetTime,当 T 是 Lunch 时如何返回 db.Lunch.Time 以及当 T 是 Dinner 时返回 db.Dinner.Time?我试图在不使用 typeof 单独测试 T 的情况下实现这一点,而是一般地进行测试。

伪代码:

public T GetTime(日期时间 dt)
{
    返回 MyDataContext.GetTable().Where(entity => entity.Time == dt);
}

因此,当我调用 GetTime 时,它会自动在 Dinner Table 中查找属性时间等于我提供的参数 dt 的所有晚餐实体。

问题是我无法在表达式中指定 entity.Time,因为 T 是泛型。我的问题是如何解决这个问题,这样我就可以查找任何 T(知道我所有的实体实际上都有 Time 属性)而不必为 Dinner 和 Lunch 创建特定的方法。

最佳答案

你必须让两个类都实现类似这样的接口(interface):

public interface IMyInterface
{
   DateTime Time{get;set;}
}

然后在您的通用方法中:

public void MyMethod<T>(T item) where T: IMyInterface
{
    //here you can access item.Time
}

关于c# - 在表达式中引用通用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/936584/

相关文章:

c# - 如何使用 C# 从 android 相机获取图像或位图

c# - 查找 int[] 中的所有连续数字

c# - ExpressionTree 重写 - 参数 'x' 不在范围内

asp.net-mvc - 使用 ASP.NET MVC 4 模型的 Bootstrap Modal

c# - C# MVC 中的动态子菜单

c# - 检查泛型集合中更多派生类型的正确方法是什么?

java - 获取Map(TreeMap/HashMap)中对应最大值关联的key

c# - DynamicTableEntity 类有何相关性?

asp.net-mvc - MVC 路由/RouteDebugger 在部署到 IIS7 时工作,但在 Cassini 中不起作用

java - 如何在 Java 中编写一个比较器来概括两种类型的对象?