如何读取文本文件并将其传递到c#中的列表?

如何读取文本文件并将其传递到c#中的列表?,c#,list,parameter-passing,file-read,C#,List,Parameter Passing,File Read,我已经申报了一份名单 List<double> list = new List<double>(); 列表已更新。它的赋值与文本文件的赋值相同。我有一个名为notes(List)的方法,它接受该列表作为参数。 在方法内部,它逐个读取列表项并打印。 但是当我调用这个方法时,我没有得到任何输出。当我手动存储要列出的值并像这样调用函数注释(list)时,我得到了预期的输出。如何解决这个问题 如果列表值介于261和262之间,则在Incpit Viewer中绘制Music s

我已经申报了一份名单

List<double> list = new List<double>();
列表已更新。它的赋值与文本文件的赋值相同。我有一个名为notes(
List
)的方法,它接受该列表作为参数。 在方法内部,它逐个读取列表项并打印。 但是当我调用这个方法时,我没有得到任何输出。当我手动存储要列出的值并像这样调用函数注释(list)时,我得到了预期的输出。如何解决这个问题


如果列表值介于261和262之间,则在Incpit Viewer中绘制Music sysmbol C。(注释表)

如果您的文件只有十进制数字,并且每个数字都在一行上,请尝试以下代码:

var result = File.ReadAllLines(@"C:\MusicExaminer\frequencies.txt").Select(x => double.Parse(x.Trim())).ToList();

我已经创建了一个简单的控制台应用程序来重现您的行为,此代码正在我的电脑上运行,请检查:

using System;
using System.Collections.Generic;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var list = new List<double>();

                using (var file = new StreamReader("C:\\MusicExaminer\\frequencies.txt"))
                {
                    var line = string.Empty;

                    while ((line = file.ReadLine()) != null)
                    {
                        list.Add(Convert.ToDouble(line, CultureInfo.InvariantCulture));
                    }
                }

                Notes(list);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            Console.ReadKey();
        }

        static void Notes(List<double> list)
        {
            foreach (var s in list)
            {
                Console.WriteLine(s.ToString("F");
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
尝试
{
var list=新列表();
使用(var file=newstreamreader(“C:\\musicexammer\\frequencies.txt”))
{
var line=string.Empty;
而((line=file.ReadLine())!=null)
{
添加(Convert.ToDouble(line,CultureInfo.InvariantCulture));
}
}
注释(列表);
}
捕获(例外情况除外)
{
控制台写入线(ex);
}
Console.ReadKey();
}
静态无效注释(列表)
{
foreach(列表中的var s)
{
控制台写入线(s.ToString(“F”);
}
}
}
}
这就是执行结果


如果您只想将结果写入控制台,可以执行以下操作:

File
    .ReadLines("C:\\MusicExaminer\\frequencies.txt")
    .Select(double.Parse)
    .ToList()
    .ForEach(Console.WriteLine);
谢谢大家。 最后我发现了错误。 我忘了刷新Inpit查看器。(注释表) 调用Notes()函数后,我添加了这一行

incipitViewer.Refresh()


现在它工作正常。

您正在阅读的文本文件中有什么?它有一些双值。比如261.63 293.45 256.36它们用行分隔?是的。261.63在新行中。293.45在下一行中。比如wise。每行有一个值。代码中有错误或异常吗?为什么这样更好?它需要缓冲ent解析前在内存中保存ire文件。对于大文件,这将是非常低效的。我认为非常大的文本文件可能包含10到20 MB,这无关紧要。但您的代码似乎也正确,但我想知道问题是什么。看起来您的输出与输入不匹配。@BrianRasmussen我想您是在谈论表单在,我已经使用不变量文化格式更新了显示文本的代码。谢谢@Jorge Ramirez。实际上,我正在从文本中获取值并将其存储到列表中。在Notes(列表)函数中,我正在比较值并创建音乐符号,并将其显示在音乐符号表中。
using System;
using System.IO;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var list = File.ReadLines("C:\\MusicExaminer\\frequencies.txt")
            .Select(line => double.Parse(line))
            .ToList();

        for (item in list)
        {
            Console.WriteLine(item.ToString());
        }
    }
}
File
    .ReadLines("C:\\MusicExaminer\\frequencies.txt")
    .Select(double.Parse)
    .ToList()
    .ForEach(Console.WriteLine);