【发布时间】:2017-01-18 10:01:19
【问题描述】:
我正在尝试编写一个函数,用数组的内容填充字符串,或者将它们设置为 null。字符串的数量可能会有所不同,我不想添加要求,比如它们都是同一个数组或类的一部分。
在 C# 中,您不能组合 param 和 out。因此,这样做的唯一方法似乎是像这样重载方法:
public void ParseRemainders(string[] remainders, out string p1)
{
p1 = null;
if ((remainders != null) && (remainders.Length > 0))
p1 = remainders[0];
}
public void ParseRemainders(string[] remainders, out string p1, out string p2)
{
p1 = null;
p2 = null;
if (remainders != null)
{
ParseRemainders(remainders, out p1);
if (remainders.Length > 1)
p2 = remainders[1];
}
}
public void ParseRemainders(string[] remainders, out string p1, out string p2, out string p3)
{
p1 = null;
p2 = null;
p3 = null;
if (remainders != null)
{
ParseRemainders(remainders, out p1, out p2);
if (remainders.Length > 2)
p3 = remainders[2];
}
}
.... and on forever ....
如何避免所有这些代码重复,理想情况下接受任意数量的参数?
编辑:这很有用,因为您可以使用ParseRemainders(remainders, out inputFileName, out outputFileName, out configFileName),然后避免手动操作
if (remainder.Length > 0) inputFileName = remainder[0];
if (remainder.Length > 1) outputFileName = remainder[1];
if (remainder.Length > 2) configFileName = remainder[2];
...
抱歉,如果不清楚,我有一个特定的目标,我为什么不简单地返回 List<>。
结论:感谢 Botond Balázs 的回答,特别是这被称为“数组解构”的提示。正如他们指出的那样,正如这个问题所证实的那样,在当前版本的 C# 中是不可能的:Destructuring assignment - object properties to variables in C#
【问题讨论】:
-
公共字符串[] ParseRemainders(string[] 余数) 有什么问题?
-
考虑使用 IEnumerable
的返回类型,不要使用 out。 -
我真的不明白为什么人们会积极反对所有初学者的问题。这个有什么问题?
-
@Botond:我同意,这是一个非常好的问题,imo。
-
@Slai 我不认为“我如何模拟与 out 结合的参数”是“out 和 ref 之间有什么区别”的副本。
标签: c# arrays destructuring