gpt4 book ai didi

c# - 如何为函数提供条件参数参数

转载 作者:太空狗 更新时间:2023-10-29 21:09:28 25 4
gpt4 key购买 nike

我有

public void Foo(string name, params object[] args)

我想用一个可以变化的参数列表来调用它。我需要做类似的事情

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

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

编辑:让我添加具体案例

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

最佳答案

您可以只使用 if 语句:

if (x == 42)
Foo("yo", a, b, c);
else
Foo("yo", a, b);

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

另一个可以消除重复函数调用的选项是使用数组或列表作为参数:

var parameters = new List<object> { a, b };

if (x == 42)
parameters.Add(c);

Foo("yo", parameters);

如果您真的想在其中获取 ?:,这也行得通:

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

对于有关 XDocument/XElement 构造函数调用的更具体的问题,您可能希望使用 Add 调用而不是一长串的构造函数调用。然后你可以让他们有条件。照原样,我认为您也应该能够通过执行以下操作来执行您所要求的操作:

XElement elementPrecedingOptionalElement = new XElement(...);

var xml = new XDocument(....,
new XElement(...),
new XElement(...),
elementPrecedingOptionalElement,
new XElement(...),
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(....,
new XElement(...),
new XElement(...),
new XElement(...),
x == 42
? new XElement(...)
: null,
new XElement(...),
new XElement(...)
);

关于c# - 如何为函数提供条件参数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16677219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com