[英]Alternating params
方法参数是否有一种交替参数?
我喜欢关键字params 。 但有时我需要两个参数作为params 。
我想调用这样的方法:
Method(1, "a", 2, "b", 3, "c")
其中 1、2 和 3 是键,“a”、“b”和“c”是赋值。
如果我尝试定义方法参数,我会直观地尝试将params用于两个参数,如下所示:
void Method(params int[] i, string[] s)
编译器会将奇数位置的每个参数添加到第一个参数,并将偶数位置的每个参数添加到第二个参数。
但是(如您所知) params仅适用于最后一个参数。
当然,我可以创建一个参数类(例如KeyValue
)并使用它:
Method(new[] {new KeyValue(1, "a"), new KeyValue(2, "b"), new KeyValue(3, "c")})
但这是太多的代码imo。
有没有更短的符号?
编辑:刚才我找到了另一个问题的好答案:它建议从List继承并重载Add方法,以便可以通过这种方式初始化新 List:
new KeyValueList<int, string>{{ 1, "a" }, { 2, "b" }, { 3, "c" }}
方法定义将是:
void Method(KeyValueList<int, string> list)
呼叫将是:
Method(new KeyValueList<int, string>{{ 1, "a" }, { 2, "b" }, { 3, "c" }})
没有您描述的“交替参数”符号。
你只能有一个params
参数并且它必须是最后一个 - 如果你想有不同的类型作为 params 参数,你可以使用object
作为数组类型。
考虑传入一个由自定义类型组成的列表,该列表保留这些项目的含义。
public class MyType
{
public int MyNum { get; set; }
public string MyStr { get; set; }
}
Method(List<MyType> myList);
你可以通过params object[] keysAndValues
来做到这params object[] keysAndValues
并自己整理出来,但是......它有点棘手,所有的装箱/拆箱都会继续进行。
只是为当今寻求解决方案的开发人员提供更新的答案......
旧学校答案:
您可以创建一个包含所需类型参数的类或结构...
struct Struct {
public int Integer {get; set;}
public string Text {get; set;}
public Struct(int integer, string text) {
Integer = integer;
Text = text;
}
}
...然后定义您的函数以接受它作为 params 数组...
void Method(params Struct[] structs)
......并称之为......
Method(new Struct(1, "A"), new Struct(2, "B"), new Struct(3, "C"));
新学校答案:
或者,使用最新的 C#,您可以简单地使用 ValueTuples...
Method(params (int, string)[] valueTuples)
......并称之为......
Method((1, "A"), (2, "B"), (3, "C"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.