从方法范围中定义“var”类型

时间:2014-06-02 20:28:52

标签: c# linq

我有一个像这样的方法调用:

public bool IsAlright(...)
{
    var myColumns = // some linq query.ToArray();

    var theirColumns = (from row in System.IO.File.ReadAllLines(@"ConfigColumns.txt")
                        where !string.IsNullOrWhiteSpace(row)
                        select new { TheColumn = row.ToUpper() }).ToArray();

    bool isAlright = // join those two above and see if they have anything in commmon.FirstOrDefault

    return isAlright;
}

但我认为每次阅读文本文件都会受到影响,我只能做一次。 所以我想把它拉出去但是怎么样?它是一个“var”,我不知道如何提取“var”并将其定义为方法范围,如缓存对象或其他东西?

3 个答案:

答案 0 :(得分:5)

var关键字不是类型,它只是意味着编译器将根据右侧表达式的类型推断出类型。

var的类型是匿名类型的数组。您不能声明匿名类型的字段或方法(除非您使用objectdynamic),因此您需要声明一个与您的匿名对象的接口匹配的类型。

在你的情况下,由于你只存储一个字符串,我建议,只返回一个string数组,而不是使用一个对象:

string[] theirColumns = (from row in System.IO.File.ReadAllLines(@"ConfigColumns.txt")
                    where !string.IsNullOrWhiteSpace(row)
                    select row.ToUpper()).ToArray();

现在,您可以将theirColumns拉出到班级中的某个字段。

答案 1 :(得分:2)

您不能在方法范围之外使用var。在您的情况下,您可以使用字符串[]而不是自定义匿名对象,或创建自定义类。然后将变量提升为类字段,并在您需要的任何其他方法中使用它。

答案 2 :(得分:1)

首先,在方法之外声明一个类。

public class YourClassName
{
     public string TheColumn {set;get;}
}

我假设每一行只是一个字符串,如果它不是

,则更改类型

将yourColumns更改为

YourClassName[] theirColumns = (from row in   System.IO.File.ReadAllLines(@"ConfigColumns.txt")
                    where !string.IsNullOrWhiteSpace(row)
                    select new YourClassName { TheColumn = row.ToUpper() }).ToArray();

在方法之外提取它。