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

C# 在使用LINQ to SQL时,这是一个虚假的警告吗?,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,根据我看到的许多LINQ示例,我正在使用类似于以下代码的代码创建自己的数据上下文和表: class MyDatabase : DataContext { public Table<Widget> Widgets; public Table<Car> Cars; public MyDatabase (string connection) : base(connection) { } } classmydatabase:DataContext{ 公共表小部件

根据我看到的许多LINQ示例,我正在使用类似于以下代码的代码创建自己的数据上下文和表:

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

  public MyDatabase (string connection) : base(connection) { } 
}
classmydatabase:DataContext{
公共表小部件;
公共餐车;
公共MyDatabase(字符串连接):基本(连接){}
}

但是对于每一个表(小部件、汽车等),我都会得到警告字段“TableName”从未分配过。我在谷歌上找不到任何人也有这个问题。我不觉得我做错了什么,因为我只是在复制我在不同地方看到的LINQ示例。那么这个警告是怎么回事?这是在警告我一个真正的问题吗?还是我遗漏了什么?

警告是有效的,因为您已经为小部件和汽车创建了定义,但它们没有被分配。这应该在构建数据上下文时自行考虑。您最终将引用它们。

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


注释响应-这不必与声明在同一行上——就在声明之后和使用之前的任何位置。同一行是常见的tho,通常用于初始值设定项,这是需要的,也是编译器抱怨的原因。

是的,它们是假的*

在中,我们了解到
DataContext
的构造函数在运行时使用反射填充字段。因此,VisualStudio根据编译时掌握的知识向您发出警告。它不知道这些字段最终是否会在使用之前填充


*根据某人在SO上的评论进行回答。甚至可能是错的

你能详细说明一下吗?我已经通过阅读来消费小工具和汽车了。我想它们是由LINQ框架自动填充的。那么这个警告什么时候会消失呢?我刚刚检查了我的代码。我还编写了自己的数据上下文对象。下面是我如何对每个表进行编码(抱歉,我无法获得正确的格式)///表示基础数据库中的Master.Enterprise表。公共表Enterprise{get{return GetTable();}}您可以编辑您的答案,让我们更容易阅读。您的意思是与声明在同一行?Resharper说这是多余的,这是多余的。默认情况下,它们是空的。我想你必须在编译器警告和重竖琴警告之间进行选择,或者(正如Randy所说)等到你完成类,它们不再是存根。这没有错,是的:警告是不正确的:的确,编译器无法检测反射。