gpt4 book ai didi

具有无限参数的 c# 方法或具有数组或列表的方法?

转载 作者:行者123 更新时间:2023-12-03 04:43:41 25 4
gpt4 key购买 nike

我最近了解到,您可以创建一些具有无限参数的方法,例如:

SomeMethod(params int[] numbers);

但我的问题是,这与创建一个接收列表或数组的方法有什么区别?
SomeMethod(int[] numbers);
SomeMethod(List<int> numbers);

也许它对性能有一些影响?我不完全理解或看到您更喜欢具有无限参数的那个。

在谷歌上快速搜索没有帮助,我希望你能帮助我。

最佳答案

what's the difference between that and just creating a method that receives a list or an array?



和...之间的不同
void M(params int[] x)


void N(int[] x)

是不是 M 可以这样称呼:
M(1, 2, 3)

或像这样:
M(new int[] { 1, 2, 3 });

但是 N 可能只能以第二种方式调用,而不是第一种方式。

perhaps it has some impact in performance?



对性能的影响是您是否调用 M在第一种方式或第二种方式中,无论哪种方式,您都会创建一个数组。创建数组会影响性能,因为它需要时间和内存。请记住,应根据绩效目标衡量绩效影响;创建额外阵列的成本不太可能是决定市场成败的关键因素。

I don't fully understand or see in what way you would prefer the one with unlimited parameters.



对于调用该方法的代码的作者来说,这纯粹是为了方便;它只是更短更容易编写
M(1, 2, 3);

而不是写
M(new int[] { 1, 2, 3 });

它只是在调用方节省了一些击键。就这些。

一些你没有问但也许想知道答案的问题:

What is this feature called?



允许在调用方传递可变数量的参数的方法称为可变参数。参数方法是 C# 实现可变参数方法的方式。

How does overload resolution work with a variadic method?



当面临重载解决问题时,C# 将同时考虑“正常”和“扩展”形式,如果两者都适用,“正常”形式总是胜出。例如,考虑一下:
void P(params object[] x){}

我们有一个电话
P(null);

有两种适用的可能性。在“正常”形式中,我们调用 P并为数组传递一个空引用。在“扩展”形式中,我们调用 P(new object[] { null }) .在这种情况下,正常形式获胜。如果我们有电话 P(null, null)那么正常形式是不适用的,扩展形式默认获胜。

挑战 : 假设我们有 var s = new[] { "hello" };和一个电话 P(s); .描述调用现场发生的情况以及原因。你可能会感到惊讶!

挑战 : 假设我们都有 void P(object x){}void P(params object[] x){} . P(null) 是什么意思做,为什么?

挑战 : 假设我们都有 void M(string x){}void M(params string[] x){} . M(null) 是什么意思做,为什么?这与之前的案例有何不同?

关于具有无限参数的 c# 方法或具有数组或列表的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59864934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com