定义“var"在方法范围之外键入
本文关键字:范围 方法 var quot 定义 | 更新日期: 2023-09-27 18:06:12
我有一个这样的方法调用:
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"和定义它的方法范围,像一个缓存的对象或什么?
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
拉出到类中的字段
不能在方法范围之外使用var。在您的情况下,您可以使用string[]代替自定义匿名对象,或者创建一个自定义类。然后将变量提升为类字段,并在您需要的任何其他方法中使用它。
首先,在方法外部声明一个类。
public class YourClassName
{
public string TheColumn {set;get;}
}
我假设每一行只是一个字符串,如果它不是
改变类型将你的theirColumns改为
YourClassName[] theirColumns = (from row in System.IO.File.ReadAllLines(@"ConfigColumns.txt")
where !string.IsNullOrWhiteSpace(row)
select new YourClassName { TheColumn = row.ToUpper() }).ToArray();
从方法外提取