Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 理解列表被更改为作为引用C传递的原因_C#_List - Fatal编程技术网

C# 理解列表被更改为作为引用C传递的原因

C# 理解列表被更改为作为引用C传递的原因,c#,list,C#,List,也许有人能帮我,我真的很为难 我有一个名为TextFunc的类,它包含两个函数 第一个函数读取一个文件路径并返回一个列表 第二个函数将该列表作为参数,并返回一个float[,]。在这个函数中,我删除了列表的第一项,因为我对标题不感兴趣 我的问题是,我的第二个函数以某种方式修改了原始列表 因此,如果我在第二个函数之前显示列表的第一项,它将显示我所期望的 在第二个功能之后,第一个项目就消失了 我不明白为什么,因为我在将参数传递到第二个函数时没有使用引用。我甚至没有在第二个函数中调用相同的名称或任何东

也许有人能帮我,我真的很为难

我有一个名为TextFunc的类,它包含两个函数

第一个函数读取一个文件路径并返回一个列表

第二个函数将该列表作为参数,并返回一个float[,]。在这个函数中,我删除了列表的第一项,因为我对标题不感兴趣

我的问题是,我的第二个函数以某种方式修改了原始列表

因此,如果我在第二个函数之前显示列表的第一项,它将显示我所期望的

在第二个功能之后,第一个项目就消失了

我不明白为什么,因为我在将参数传递到第二个函数时没有使用引用。我甚至没有在第二个函数中调用相同的名称或任何东西

我的类包含两个函数,看起来像这样,只保留了相关部分:

    class TextFunc
{

    public static List<string> ParseText(string filePath)
    {

        List<string> lines = File.ReadAllLines(filePath).ToList();

        //do some stuff

        return lines;
    }



    public static float[,] txt2Array(List<string> txtList)
    {
        
        txtList.RemoveAt(0);

        // do some stuff
        return floatArray;
    }
}
我从Form1.cs中的buttonclick事件调用类似这样的函数

    public partial class BRkData : Form
{
    public BRkData()
    {
        InitializeComponent();
        
    }

    private void BRkData_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        List<string> txtFile = TextFunc.ParseText(@"C:\org_data.res");
        MessageBox.Show(txtFile[0]); // here it displays what I expect
        float[,] floatArr = TextFunc.txt2Array(txtFile);
        MessageBox.Show(txtFile[0]); // here the first item of the list is gone?        
    }

}

我甚至尝试在txt2Array函数中复制列表,但这并不重要。不知何故,这就像我在不知情的情况下向该函数发送了对列表的引用。

当我试图在函数中复制它时,我不知道必须使用ToList命令

List txtList=txtList_org.ToList


感谢您的澄清,并为我指明了正确的方向

这样想吧。有一个叫列表引用类型object的人,他知道一个好酒吧的列表。你在一张纸上有他的电话号码

调用方法就像将电话号码给其他人一样。他们把它写在不同的纸上,但同一个人接电话


使用ref关键字传递意味着你给了对方同样的纸张。他们可以划掉原来的电话号码,放入一个新的号码,然后返回给您。

List txtList是对该对象的引用。当您对该对象调用方法时,它可能会修改该对象,因为它没有副本。因为List是一个类,因此是一个引用类型,所以当您将它传递给一个方法时,您正在创建对同一对象的另一个引用,而不是创建该对象的副本。@Liam-string不是值类型。它是一个不可变的引用type@UnholySheep它没有潜力;该对象将被修改。@好的,只是如果OP正在学习引用类型和值类型可能会混淆。