【问题标题】:Why is 'IEnumerable<T.GetProperty(identityProperty).GetType())> Set' not Valid?为什么 'IEnumerable<T.GetProperty(identityProperty).GetType())> Set' 无效?
【发布时间】:2014-12-08 13:27:06
【问题描述】:

这里的任何人都可以解释为什么我无法执行以下操作?

Type u = typeof(T).GetProperty(identityProperty).GetType();
IEnumerable<u> keySet = null;

我知道这对某些人来说可能很容易,但我真的很感谢您的回答。

【问题讨论】:

  • 我猜是关于静态类型的。
  • ... 代码中有多余的 ')'。编辑:编辑后,这个问题仍然在问题的标题中......)
  • 那么,您得到了 T 的类型,并使用它来获取身份属性类型?所以你假设你知道所有类型 T 都有一个身份属性?如果是这样,为什么 T 不是可以定义身份属性的接口的实例?由于接口可以继承和覆盖它们的属性,因此您可以通过强输入此代码的父方法来测试您实际与哪个接口对话。
  • 不是这样,因为在上面几行之前,我有 if (typeof(T).GetProperty(identityProperty) ==null) return result;

标签: c# .net generics dynamic


【解决方案1】:

使用静态绑定的泛型。这意味着类型是在编译代码时定义的。在您的示例中,类型 u 将在运行时定义。

但也许 Type.MakeGenericType() 方法可以帮助你;)

【讨论】:

  • new Foo().GetType() == new Foo().GetType() 怎么样?
  • “编译器”不会创建“一个用于 int 的 Foo 类和一个用于字符串的”!这就是 c++ 模板和 c# 泛型之间的区别......但是.. 你的答案仍然部分 (99) 正确
  • 但是我在某处读到值类型泛型是单独实例化的,而引用类型泛型是相同实例化的?
  • 感谢 Mikant 的更正。我检查了它并且它接缝,编译器没有创建多个类。无论使用值类型还是引用类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2012-09-14
相关资源
最近更新 更多