定义“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关键字不是类型,它只是表示编译器将根据右侧表达式的类型推断类型。

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

在你的情况下,因为你只存储一个字符串,我建议,只是返回一个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();

从方法外提取