2010-02-01 21 views
3

每我见过LINQ的例子很多,我创造我自己的数据上下文和表使用类似下面的一个代码:这是使用LINQ to SQL时的虚假警告吗?

class MyDatabase : DataContext { 
    public Table<Widget> Widgets; 
    public Table<Car> Cars; 

    public MyDatabase (string connection) : base(connection) { } 
} 

但是对于每个表(窗口小部件,汽车等),我收到警告字段'表名'从未分配。我无法在Google上找到也有此问题的人。我不觉得自己做错了什么,因为我只是复制了我在不同地方看到的LINQ示例。那么这个警告是怎么回事?它警告我一个真正的问题吗?或者我错过了什么?

回答

3

是的,他们是虚假的。*

this other question about how DataContext works,我们了解到,对于DataContext构造函数使用反射来填充在运行时的字段。所以Visual Studio根据它在编译时的知识给你一个警告。它不知道最终这些字段在被消耗之前已经被填充。

*基于SO上发现的其他人的评论的答案。甚至可能是错的!

+0

这没有错,是的:警告是不正确的:事实上,编译器无法检测到反射。 – 2010-02-01 20:39:44

+0

马克和马克解决了一个谜团,让人们走出去。 – Hogan 2010-02-01 22:10:23

0

该警告是有效的,因为您已经创建了窗口小部件和汽车的定义,但未分配它们。这应该照顾自己,因为你建立你的数据上下文。你最终会引用它们。

+0

您能详细解释一下吗?我已经从他们那里读取了Widgets和Cars。我认为它们是由LINQ框架自动填充的。那么这个警告何时会消失? – 2010-02-01 16:17:45

+0

我刚刚检查了我的代码。我也写了自己的数据上下文对象。这里是我已分别编码(对不起,我不能得到正确的格式) ///

表示基础数据库中的表Master.Enterprise。 公共表企业 { {返回GetTable (); } \t \t \t \t \t} – 2010-02-01 17:03:46

+0

您可以编辑您的答案,让我们更容易阅读。 – Hogan 2010-02-01 19:56:53

0

您可以通过在声明后将它们分配为空来解决此问题。

评论回复 - 这不必与声明在同一行 - 声明之后的任何地方和使用之前。同一行是常见的,通常用于初始化器,这正是需要的,也是编译器为什么抱怨的原因。

+0

你的意思是与宣言在同一行? Resharper说这是多余的。 – 2010-02-01 16:42:10

+0

它是多余的。它们默认为空。 – 2010-02-01 16:56:41

+0

嗯,我猜你必须在编译器警告和Resharper警告之间进行选择,或者(如Randy所说)等到你完成课程后才能再选择它们。 – Hogan 2010-02-01 19:51:52