【问题标题】:Derived type functionality in delegate委托中的派生类型功能
【发布时间】:2011-06-14 19:13:16
【问题描述】:

我想写一个签名为Expression<Func<T, bool>> Foo<T>()的方法。我的 U 类继承自 T。我想在此委托中包含特定于 U 的处理。问题是,T 不能隐式转换为 U。有什么方法可以在这个方法中访问 U 特定的属性吗?

复杂性:我也有想要处理的类型 V : T,所以我不能通过在签名中用 U 替换 T 来利用方差。

【问题讨论】:

  • 听起来您需要将U 类型中的一些所需功能移动到基本类型T。
  • 不幸的是我不能,因为非空鉴别器列必须映射到 EF 中的子级:-/
  • 为什么不能在你的方法中明确地将T 转换为U?
  • 实体框架不允许隐式转换 edm 类型。我可以写一些隐式运算符,但我不知道是否有其他方法。

标签: c# entity-framework generics delegates variance


【解决方案1】:

一个简单的方法是定义一个接口,T 和 U 都从它继承(使用它)。

【讨论】:

  • 那不是让我仍然必须隐式转换为 U 才能访问 U 的字段吗?
  • 我有点困惑,T 是代表你的一个对象还是代表一个通用对象?
  • T 是顶级类。我希望能够访问该方法中特定于 U 的属性。如果我添加一个接口,我仍然必须将 T 强制转换为 U 才能访问 U 的属性,或者我必须让 T 实现一个共享的 U 属性,这太过分了,因为 T 不应该有 U 属性。
【解决方案2】:

我最终使用了单独的重载:()、(myVar) where T : U 和 (myvar, myvar2) where T: V。这成功了,我很幸运,因为每个参数都是对应于的应用程序值实体属性。

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 2011-06-17
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多