我有一个像这样的方法调用:
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”并将其定义为方法范围,如缓存对象或其他东西?
答案 0 :(得分:5)
var
关键字不是类型,它只是意味着编译器将根据右侧表达式的类型推断出类型。
var
的类型是匿名类型的数组。您不能声明匿名类型的字段或方法(除非您使用object
或dynamic
),因此您需要声明一个与您的匿名对象的接口匹配的类型。
在你的情况下,由于你只存储一个字符串,我建议,只返回一个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();
在方法之外提取它。