2010-11-02 66 views
2

我在我的主要功能LINQ与未赋值的变量参数

string brand; 
double price; 
var itemList6 = from i in myStore.items 
    where i.price <= price && i.brand == brand 
    orderby i.type 
    select i; 

后来在节目中我问了一个品牌和价格的用户顶部以下变量声明,把它们放在相应的变量,然后运行该查询。但是,编译器不会让我运行这个,因为我在查询中使用了未分配的变量。是通过初始化变量解决这个问题的唯一方法吗?我通常会尝试不初始化变量,如果我不需要一个初始值,因为我觉得它很混乱(试图了解以后/为什么我使用该默认值)。

回答

1

在构建LINQ查询之前,您必须为变量赋值。

原因是编译器正在使用变量来构造查询。即使查询不会执行,编译器也需要在使用之前分配变量,编译器会将查询表达式构建为use。

我的建议只是把一些标称的默认/临时值在那里。

+0

查询在运行之前未完全构建。这是LINQ的延期执行。我甚至可以(并且我会)不断地为变量分配不同的值,并针对不同的结果再次运行查询 – baruch 2010-11-02 21:46:16

+0

@baruch:你是对的。我并不知道这个部分的执行。这一点仍然存在,即使变量没有被查询构造“使用”,您在使用它之前也需要初始化一个变量。 – 2010-11-02 23:43:44

3

你可以写一个函数,并通过这些变量作为参数,以避免intialization ..

此外,在情况下,你最终会初始化考虑,以避免使用空??

+0

这样做很难,但是会造成更多混乱,然后增加一些默认值,并且还会有调用函数和每次重新创建变量的开销。 – baruch 2010-11-04 06:03:19

0

解决这个问题的另一种方法是在你明确赋予这些变量值之前不要创建查询对象。