使用LINQ to SQL时,这是一个虚假的警告吗?

根据我见过的许多LINQ示例,我使用类似下面的代码创建自己的数据上下文和表:

class MyDatabase : DataContext { public Table Widgets; public Table Cars; public MyDatabase (string connection) : base(connection) { } } 

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

是的,他们是假的。*

在关于DataContext如何工作的另一个问题中 ,我们了解到DataContext的构造函数使用reflection在运行时填充字段。 因此,Visual Studio会根据编译时的知识向您发出警告。 它不知道这些字段最终会在消耗之前填充。

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

该警告是有效的,因为您已为Widgets和Cars创建了一个定义但未分配它们。 在构建数据上下文时,这应该自行处理。 你最终会引用它们。

您可以通过在声明后将它们指定为null来解决此问题。

注释响应 – 这不必与声明在同一行 – 就在声明之后和使用之前的任何地方。 相同的行是常见的,通常用于初始化器,这是所需要的以及编译器抱怨的原因。