c# – 如何为函数设置条件参数参数
发布时间:2020-12-15 04:22:53 所属栏目:百科 来源:网络整理
导读:我有 public void Foo(string name,params object[] args) 我想用一个可以变化的args列表来调用它.我需要做点什么 Foo("yo",a,b,x==42?c); 即如果x是42则传入a,c否则传入a,b.当然,这种语法不起作用.我知道我可以将args编组到List并将列表传递给函数,但是这样
我有
public void Foo(string name,params object[] args) 我想用一个可以变化的args列表来调用它.我需要做点什么 Foo("yo",a,b,x==42?c); 即如果x是42则传入a,c否则传入a,b.当然,这种语法不起作用.我知道我可以将args编组到List并将列表传递给函数,但是这样做组织代码的方式会非常混乱.那么我可以使用一些语法魔法 编辑:让我添加具体案例 var xml = new XDocument(....,new XElement(....),x==42? new XElement(.....),new XElement(....) .... 解决方法
你可以使用if语句:
if (x == 42) Foo("yo",c); else Foo("yo",b); 在这种情况下,你不能使用?:运算符(至少在函数调用之外),因为Foo没有返回值. ?:运算符必须评估某些东西,并且必须将某些东西分配给其他东西. 摆脱重复函数调用的另一个选择是使用params的数组或列表: var parameters = new List<object> { a,b }; if (x == 42) parameters.Add(c); Foo("yo",parameters); 如果你真的想要得到?:在那里,这也会有效: Foo("yo",x == 42 ? new object[] { a,c } : new object[] { a,b }); 有关XDocument / XElement构造函数调用的更具体问题,您可能希望使用Add调用而不是一系列构造函数调用.然后你可以让他们有条件.就像我一样,我认为你也应该通过做这样的事情来做你所要求的事情: XElement elementPrecedingOptionalElement = new XElement(...); var xml = new XDocument(....,new XElement(...),elementPrecedingOptionalElement,new XElement(...) ); if (x == 42) elementPrecedingOptionalElement.AddAfterSelf(new XElement(...)); 使用Add调用看起来像这样: XDocument xml = new XDocument(); XElement root = new XElement("Root"); xml.Add(root); root.Add(new XElement("Item1")); root.Add(new XElement("Item2")); if (x == 42) root.Add(new XElement("Item2.5")); root.Add(new XElement("Item3")); root.Add(new XElement("Item4")); 实际上,最接近你所要求的版本就是这样,这似乎有效: var xml = new XDocument(....,x == 42 ? new XElement(...) : null,new XElement(...) ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用XML和java代码混合控制UI界面
- SWF和远程链接交互,本地直接运行SWF格式的文件会出现拦截问
- c# – 如何创建WPF ControlTemplate
- Oracle Database 12.1中rman show all的新变化
- XML -可扩展标记语言
- c# – Java中DateTime.FromOADate()的等价物(Java中的日期时
- OpenStack Swift源码导读:业务整体架构和Proxy进程
- ruby-on-rails – 添加默认角色以设计用户模型
- c# – StackOverflowException尝试通过WCF服务将Linq查询结
- mongodb nosql 大数据提高查询速度-索引