相关疑难解决方法(0)

由ref传递的列表 - 帮我解释一下这种行为

看看以下程序:

class Test
{
    List<int> myList = new List<int>();

    public void TestMethod()
    {
        myList.Add(100);
        myList.Add(50);
        myList.Add(10);

        ChangeList(myList);

        foreach (int i in myList)
        {
            Console.WriteLine(i);
        }
    }

    private void ChangeList(List<int> myList)
    {
        myList.Sort();

        List<int> myList2 = new List<int>();
        myList2.Add(3);
        myList2.Add(4);

        myList = myList2;
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设myList已经过去了ref,输出会

3
4
Run Code Online (Sandbox Code Playgroud)

该列表确实"通过ref传递",但只有该sort函数生效.以下声明myList = myList2;无效.

所以输出实际上是:

10
50
100
Run Code Online (Sandbox Code Playgroud)

你能帮我解释一下这个行为吗?如果确实myList没有通过ref(因为它看起来myList = myList2没有生效),如何myList.Sort()生效?

我甚至假设该语句不生效,输出为:

100
50
10
Run Code Online (Sandbox Code Playgroud)

c# list pass-by-reference

97
推荐指数
5
解决办法
9万
查看次数

C#是通过引用还是作为副本将List <T>传递给方法?

从C/C++迈出C#世界的第一步,细节上有点模糊.据我所知,类默认通过引用传递,但是例如.列出<string>,如:

void DoStuff(List<string> strs)
{
    //do stuff with the list of strings
}
Run Code Online (Sandbox Code Playgroud)

和其他地方

List<string> sl = new List<string>();
//next fill list in a loop etc. and then do stuff with it:
DoStuff(sl);
Run Code Online (Sandbox Code Playgroud)

SL在这种情况下按引用传递或者是副本上进行,这样我需要重新定义,如工人功能

void DoStuff(ref List<string> strs)
实际上是对sl本身采取行动而不是副本?

c# pass-by-reference pass-by-value

18
推荐指数
4
解决办法
4万
查看次数

C#对象和内存管理

假设我有以下代码,其中Car类只有1个属性: String modelname

Car c = new Car("toyota");
Car c1 = c;
Car c2 = c;
Car c3 = c;
Car c4 = c;
Car c5 = c;
Run Code Online (Sandbox Code Playgroud)

这是否每次都会制作一张新车?所以在记忆中会有一个新的"丰田"字符串5倍以上?或者"丰田"字符串只会在内存中一次?

编辑:添加此相关链接,以防您遇到与我相同的问题,我认为这有助于 数组或列表默认通过c#中的引用传递?

c# object

1
推荐指数
1
解决办法
179
查看次数

为什么我的方法会更改传递给它的对象的原始值?

我有以下对象

var filters = new List<IReportFilter>
{
    new ReportFilter
    { 
        ReportColumn = new ReportColumn{ ColumnKey = "Result.IsCompleted"},
        Value = "1",
        SubFilters = new List<IReportFilter> 
        {
             new ReportFilter { SqlOperator = FilterOperator.Or, ReportColumn = new ReportColumn{ ColumnKey = "User.LastName"}, Value = "Alhayek"},
             new ReportFilter { SqlOperator = FilterOperator.Or, ReportColumn = new ReportColumn{ ColumnKey = "User.LastName"}, Value = "Smith"},
             new ReportFilter { SqlOperator = FilterOperator.Or, ReportColumn = new ReportColumn{ AggregateFunction = SqlAggregateFunctions.Count}, Type = FilterType.GreaterThenOrEqualTo ,Value = "0" },
        }

    },

}; …
Run Code Online (Sandbox Code Playgroud)

c#

1
推荐指数
1
解决办法
429
查看次数

通过引用或值传递的数组

可能重复:
在c#中默认通过引用传递数组或列表吗?

我在这里读到了一些关于C#的矛盾帖子,以及数组是通过值传递还是通过引用传递的.有人可以澄清C#数组是按值传递还是按引用传递?

谢谢

c# arrays reference

0
推荐指数
1
解决办法
5857
查看次数

数组值始终为"0"

为什么我的代码数组值总是包含"0"?

        static void Main(string[] args)
        {
            string Input = Console.ReadLine();
            char[] Number = new char[3];
            Util.SetNumber(Input,Number);
            foreach (char digit in Number)
            {
                Console.WriteLine(digit);
            }
            Console.ReadKey();            
        }
Run Code Online (Sandbox Code Playgroud)

这是班级:

    class Util
    {
        public static void SetNumber(string Input,char[] Number)
        {            
            Number = Input.ToCharArray();                   
        }

    }
Run Code Online (Sandbox Code Playgroud)

但是,如果将"foreach"部分放在Util.cs中,它会写出值.

谢谢你,

c#

0
推荐指数
1
解决办法
142
查看次数

相同字节显示不同的结果

在不更改byte [] numArray的情况下,即使字节保持完全相同,两个消息框也会显示不同的输出.我糊涂了.

第一个MessageBox的结果:stream:stream to =""version ="1.0"xmlns:stream ="http://etherx.jabber.org/streams">

第二个MessageBox的结果: F^ v

第三个MessageBox:"匹配"

MessageBox.Show(System.Text.Encoding.UTF8.GetString(numArray));
byte[] num1 = numArray;
byte[] encrypted =  getEncryptedInit(numArray);
MessageBox.Show(System.Text.Encoding.UTF8.GetString(numArray));
byte[] num2 = numArray;
if (num1.SequenceEqual<byte>(num2) == true)
{
    MessageBox.Show("Match");
}
Run Code Online (Sandbox Code Playgroud)

.net c# byte

0
推荐指数
1
解决办法
101
查看次数

标签 统计

c# ×7

pass-by-reference ×2

.net ×1

arrays ×1

byte ×1

list ×1

object ×1

pass-by-value ×1

reference ×1