问题标签 [params-keyword]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - String.Format() - 重新传递参数但添加更多参数
我想做这样的事情:
所以,我想重新传递一个参数数组,String.Format()
但添加一个新参数。
最好的方法是什么,知道我们可以“重建”一个新的对象数组,这似乎并不好。
c# - params[] 可以作为 lambda 表达式的参数吗?
我最近开始探索 lambda 表达式,我想到了一个问题。假设我有一个需要不确定数量的参数的函数。我会使用 params 关键字来对可变数量的参数进行建模。
我的问题:我可以用 Lambda 表达式做类似的事情吗?例如:
如果是这样,就会出现两个子问题 - 是否有一种“好”的方式来编写这样的表达式,我什至想在某个时候写这样的表达式?
c# - 在 Unity 中注册时是否可以指定可变长度的构造函数参数?
我有一个接口 ,IFoo
和三个具体类:FooA : IFoo
,FooB : IFoo
和MultiFoo : IFoo
.
for 的构造函数MultiFoo
如下所示:
MultiFoo
在 Unity 中注册时可以指定特定的分辨率覆盖吗?我希望能够做这样的事情:
然后它将在解析时将已解析的 FooA 和已解析的 FooB 传递给构造函数:
c# - 带有“params”关键字的方法的几个重载
我看过Path.Combine
并注意到它有四个重载:
string
,string
string
,string
,string
string
,string
,string
,string
params string[]
前三个重载有什么用?
在我看来,第四个重载使其他重载毫无意义。我查看了源代码,确实发现第四个重载的实现有点不同,但即使在这种情况下,我也希望只有一个params
重载根据数组的长度决定使用哪个实现。
c# - 将数组解包到方法参数中
如您所知,C# 通过params
关键字支持可变参数方法:
然后可以使用您喜欢的任意数量的参数调用它:
但是假设我想使用s 1Add
的数组来调用。这是否可能以及如何(最好没有反思)?我尝试了以下方法,但它们给出了语法错误(语法纯属猜测):int
1我的实际用例有所不同,但我认为这个例子不会那么复杂。
c# - 在方法覆盖中更改 params 修饰符
我知道params
修饰符(将数组类型的一个参数转换为所谓的“参数数组”)特别不是方法签名的一部分。现在考虑这个例子:
这编译没有警告。然后说:
给出一个错误(No overload for method 'Eat' takes 3 arguments
)。
现在,我知道编译器会将params
修饰符转换为System.ParamArrayAttribute
相关参数的应用程序。通常,将一个属性集合应用于虚拟方法的参数,然后在派生类的覆盖方法中用不同的属性集修饰“对应”参数是没有问题的。
然而编译器选择params
默默地忽略我的关键字。相反,如果反过来,将其应用于params
基类中的参数Giraffid
,然后在覆盖中省略关键字,则Okapi
编译器会选择用. 当然,我用 IL DASM 验证了这些东西。System.ParamArrayAttribute
我的问题:
这是记录在案的行为吗?我已经彻底搜索了 C# 语言规范,但没有发现任何提及这一点。
我可以说至少 Visual Studio 开发环境对此感到困惑。2, 4, 6
在上述方法调用中键入时,智能感知会在提示中显示void Okapi.Eat(params int[] leaves)
我。
params
为了比较,我还尝试实现一个接口方法并更改接口和实现类中的存在/不存在,我尝试定义一个委托类型并params
在委托类型定义或我分配给其方法组的方法中更改或不更改我的委托类型的变量。在这些情况下,完全有可能改变params
-ness。
c# - 使用 params 关键字时 C# 中的方法重载行为异常
好的,回到基础。我想知道如何正确重载带有params
参数的方法。
这是我的场景。我从我的常规方法开始:
我为它创建了一个看起来像这样的重载:
明显的意图是MyMethod(new MyObject());
执行原始方法并MyMethod(new MyObject(), "field0"/*, etc...*/);
执行重载方法。但我发现情况并非如此。
实际发生的是MyMethod(new MyObject());
执行重载的方法!
我不明白。在这种情况下,我将如何执行原始方法?
使用实际代码更新
好的,这是产生所描述行为的实际代码。
Class1Base.cs:
Class1.cs:
我的对象.cs:
然后,当我以这种方式执行此代码时:
控制台显示:
我原以为它会显示:
为什么不呢?
c# - 如何传递 PropertyExpression 的参数列表
我有一个通用存储库,我试图在其中包含一个函数,该函数接受要急切加载的子表的变量列表。该函数如下所示:
它有效,但我担心object
参考。
因此使用该功能:
includeEntites
数组中传递的参数System.Linq.Expressions.PropertyExpression
是不幸的是一个内部类的类型,所以我不能制作函数签名:
如我所愿。有什么想法吗?
c# - 在 C# 中使用参数浏览字典
我创建了一个方法,它接收未指定数量的字典参数并扫描所有这些参数的内容,但没有涵盖相同的内容,它在第一次或第二次 foreach 中给出错误,具体取决于我修复的内容。Consegundo'm 没有解决这个问题。我怎样才能使这项工作变得异常。
我得到了 params 字典,我想浏览每个字典的内容。
我在下面遵循的代码:
c# - 如何确保使用“params”关键字的签名更改时出现编译错误
我有这样的方法:
新要求导致了这样的变化:
问题是,即使我更改了方法签名,也没有发生编译错误,这当然是正确的,但我希望每次调用未指定Foo
参数的方法时都会出现编译错误。baz
也就是说,如果Foo
更改之前的调用是这样的:
它现在需要是这个:
如果不以这种方式更改,p1
则将分配给baz
,并且 params 数组args
的长度为 1 并且OutOfBounds
将引发异常。
更改签名并确保所有调用代码都相应更新的最佳方法是什么?(真正的场景是在Foo
构建服务器上自动构建的许多项目共享的程序集中。因此,编译错误将是检测所有需要修改以适应更改的代码的简单方法。)
编辑: 正如 Daniel Mann 和其他人指出的那样,上面的例子表明我根本不应该使用 params。所以我应该解释一下,在我的真实示例中,args 并不总是需要有两个元素,就 Foo 中的逻辑而言,args 可以包含任意数量的元素。假设这是 Foo: