c# – 如何为函数设置条件参数参数

前端之家收集整理的这篇文章主要介绍了c# – 如何为函数设置条件参数参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有
  1. public void Foo(string name,params object[] args)

我想用一个可以变化的args列表来调用它.我需要做点什么

  1. Foo("yo",a,b,x==42?c);

即如果x是42则传入a,c否则传入a,b.当然,这种语法不起作用.我知道我可以将args编组到List并将列表传递给函数,但是这样做组织代码的方式会非常混乱.那么我可以使用一些语法魔法

编辑:让我添加具体案例

  1. var xml = new XDocument(....,new XElement(....),x==42? new XElement(.....),new XElement(....)
  2. ....

解决方法

你可以使用if语句:
  1. if (x == 42)
  2. Foo("yo",c);
  3. else
  4. Foo("yo",b);

在这种情况下,你不能使用?:运算符(至少在函数调用之外),因为Foo没有返回值. ?:运算符必须评估某些东西,并且必须将某些东西分配给其他东西.

摆脱重复函数调用的另一个选择是使用params的数组或列表:

  1. var parameters = new List<object> { a,b };
  2.  
  3. if (x == 42)
  4. parameters.Add(c);
  5.  
  6. Foo("yo",parameters);

如果你真的想要得到?:在那里,这也会有效:

  1. Foo("yo",x == 42 ? new object[] { a,c } : new object[] { a,b });

有关XDocument / XElement构造函数调用的更具体问题,您可能希望使用Add调用而不是一系列构造函数调用.然后你可以让他们有条件.就像我一样,我认为你也应该通过做这样的事情来做你所要求的事情:

  1. XElement elementPrecedingOptionalElement = new XElement(...);
  2.  
  3. var xml = new XDocument(....,new XElement(...),elementPrecedingOptionalElement,new XElement(...)
  4. );
  5.  
  6. if (x == 42)
  7. elementPrecedingOptionalElement.AddAfterSelf(new XElement(...));

使用Add调用看起来像这样:

  1. XDocument xml = new XDocument();
  2. XElement root = new XElement("Root");
  3. xml.Add(root);
  4.  
  5. root.Add(new XElement("Item1"));
  6. root.Add(new XElement("Item2"));
  7. if (x == 42)
  8. root.Add(new XElement("Item2.5"));
  9. root.Add(new XElement("Item3"));
  10. root.Add(new XElement("Item4"));

实际上,最接近你所要求的版本就是这样,这似乎有效:

  1. var xml = new XDocument(....,x == 42
  2. ? new XElement(...)
  3. : null,new XElement(...)
  4. );

猜你在找的C#相关文章