【发布时间】:2012-07-23 14:46:54
【问题描述】:
我正在尝试创建一个泛型类:
public class ClassName<T>
{
public T AccessEntity(string id)
{
return (from e in ServiceContext.CreateQuery<T>(TableName)
where e.RowKey == id // error here!
select e).FirstOrDefault();
}
}
在这段代码中,我收到以下错误:
T 不包含 RowKey 的定义
但是将在运行时替换 T 的参数具有 RowKey 的定义。可能是因为编译器在编译时没有在 T 中获得 RowKey 的定义,这就是我收到此错误的原因。谁能告诉我如何解决这个问题?
【问题讨论】:
-
作为评论 - 我赞成正确答案之一:编译器不关心 T 稍后会是什么。它关心它在编译时知道的内容,这意味着您可以创建 ClassName
并且 Dumbo 没有 RowKey -> 错误。添加约束 ;) -
Pro 说明了 TomTom 的观点:在 c# 中,您可以编写一个类型在运行时,并为新类型调用泛型类型——只要它满足约束,它'会工作的。这与 c++ 模板非常不同。
标签: c# .net generics compiler-errors