方法参数是否有一种交替的参数? 我喜欢关键字 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")})
但是那个代码太多了。
是否有更短的符号?
修改:刚才我找到了另一个问题answer:它建议继承 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" }})
答案 0 :(得分:3)
没有&#34;交替参数&#34;你描述的符号。
您只能拥有一个params
参数,并且必须是最后一个 - 如果您希望将不同类型作为参数参数,则可以使用object
作为数组类型。
考虑传入由自定义类型构成的列表,该列表保留这些项目的含义。
public class MyType
{
public int MyNum { get; set; }
public string MyStr { get; set; }
}
Method(List<MyType> myList);
答案 1 :(得分:1)
你可以通过params object[] keysAndValues
做到这一点并自己解决,但是...它有点icky,所有的装箱/拆箱会发生什么。
答案 2 :(得分:0)
为今天正在寻找解决方案的开发人员提供最新答案...
老派答案:
您可以创建一个包含所需类型的参数的类或结构...
<p>Made with <span style="color: #ff0000;">❤</span> by WAP </p>
...然后定义您的函数以将其接受为params数组...
struct Struct {
public int Integer {get; set;}
public string Text {get; set;}
public Struct(int integer, string text) {
Integer = integer;
Text = text;
}
}
...并称呼它...
void Method(params Struct[] structs)
新学校答案:
或者,使用最新的C#,您只需使用ValueTuples ...
Method(new Struct(1, "A"), new Struct(2, "B"), new Struct(3, "C"));
...并称呼它...
Method(params (int, string)[] valueTuples)