为什么不工作返回c#

本文关键字:返回 工作 为什么不 | 更新日期: 2023-09-27 18:17:39

我有以下代码:

public static Array readCVS(string absolutePath)
{
    string[,] temperatureMatrix = new string[384, 288];
    string value;
    using (TextReader fileReader = File.OpenText(absolutePath))
    {
        var csv = new CsvReader(fileReader);
        csv.Configuration.HasHeaderRecord = false;
        int y = 1;
        while (csv.Read())
        {
            for (int x = 1; csv.TryGetField<string>(x, out value); x++)
            {
                x = x - 1;
                temperatureMatrix[1, 1] = value;
            }
            y = y + 1;
        }
        return temperatureMatrix;
    }
}

所以return t;不起作用,我的意思是它不返回数组,我也试着在这里设置断点,然后我看不到填充数组的结构

为什么不工作返回c#

正如Steve所指出的,您的代码似乎有很多地方不正确。我还想指出一点,最好使用List而不是Array,因为如果你有一个大文件,你会得到索引超出范围的异常。和List将给你无限的长度。

public static List<string> readCVS(string absolutePath)
{
    List<string> result = new List<string>();
    string value;
    using (TextReader fileReader = File.OpenText(absolutePath))
    {
        var csv = new CsvReader(fileReader);
        csv.Configuration.HasHeaderRecord = false;
        while (csv.Read())
        {
            for (int i = 0; csv.TryGetField<string>(i, out value); i++)
            {
                result.Add(value);
            }
        }
    }
    return result;
}

我不知道你为什么在你的代码中使用y。这是没有用的,我们只是在递减它

似乎您的代码在用于读取CsvReader提取的一行的列值的for中进入了无限循环。

我认为你应该修改你的代码,以删除for循环内x的减量(不清楚该行的原因,但肯定不允许x前进到输入行的下一列)。

最后,您应该使用正确的y(用于行)和x(用于列)设置矩阵的值

public static Array readCVS(string absolutePath)
{
    string[,] temperatureMatrix = new string[384, 288];
    string value;
    using (TextReader fileReader = File.OpenText(absolutePath))
    {
        var csv = new CsvReader(fileReader);
        csv.Configuration.HasHeaderRecord = false;
        int y = 0;
        while (csv.Read())
        {
            for (int x = 0; csv.TryGetField<string>(x, out value); x++)
                temperatureMatrix[x, y] = value;
            y = y + 1;
        }
        return temperatureMatrix;
    }
}

我还将x和y的初始索引从1更改为0。在Net数组(也是多维数组)中,从索引0开始,而不是1。

还需要注意的是,这段代码非常依赖于输入文件的确切结构。如果文件的行数超过288行,或者单行中的单个temp值超过384个,代码将崩溃,并产生索引超出范围异常。