繁体   English   中英

交替参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM