c# - params 关键字是否支持将 ValueTuple 作为参数 C# 7.0?
问题描述
我在StackOverflow中搜索,没有找到任何文章或与此相关的任何内容。
例如,以下示例描述了ValueTuple数组
(string CategoryName, params string[] Properties)[] MyArrayValueTupleParameter // Compile-Time Syntax error
请注意,前面的示例用作参数。不是变量。
但只能string[]
在没有参数的情况下工作?我在这里错过了什么还是默认不支持?
乍看上去:
这个作品
void ShowAppearanceCategories((string CategoryName, string[] Properties)[] VisibleCategories)
{
foreach (var Row in PropertyGridControl.Rows)
{
var VisibleCategory = VisibleCategories.FirstOrDefault(x => x.CategoryName == Row.Name);
if (VisibleCategory != default)
{
foreach (var ChildRow in Row.ChildRows)
{
if (VisibleCategory.Properties.Any(x => ChildRow.Name.Contains(x)))
{
ChildRow.Visible = false;
}
}
}
else
{
Row.Visible = false;
}
}
}
这不起作用
void ShowAppearanceCategories((string CategoryName, params string[] Properties)[] VisibleCategories) // Syntax-Error
{
foreach (var Row in PropertyGridControl.Rows)
{
var VisibleCategory = VisibleCategories.FirstOrDefault(x => x.CategoryName == Row.Name);
if (VisibleCategory != default)
{
foreach (var ChildRow in Row.ChildRows)
{
if (VisibleCategory.Properties.Any(x => ChildRow.Name.Contains(x)))
{
ChildRow.Visible = false;
}
}
}
else
{
Row.Visible = false;
}
}
}
解决方案
在方法签名中,params 关键字必须在参数列表的开头或前一个参数之前。它后面必须跟附加参数的类型。
所以:
ReturnType MethodName(/* arguments */, params Type[] containingArrayName) { /* method body */ }
在您的签名中,您可以看到params
不在参数声明的开头:
void ShowAppearanceCategories((string CategoryName, params string[] Properties)[] VisibleCategories)
此处的额外括号(string CategoryName, params string[] Properties)
使其更接近元组类型,其中params
不允许关键字导致语法错误。
我不确定你在追求什么,但似乎是这样的:
void ShowAppearanceCategories(params (string CategoryName, string[] Properties)[] VisibleCategories)
推荐阅读
- laravel - 将上传的文件移动到 root/public_html
- python - 为什么我的程序要求输入两次?
- azure - 验证在 Web api 中登录外部应用程序的用户
- sqlite - 如何找到所需的条款条目
- mysql - MySQL:是否可以使用 SELECT 作为唯一权限在 SELECT 之外设置变量?
- linux - 如何生成数字 X 到给定数字 Y 的多重性的随机列表?
- python - 如何删除熊猫数据框列中与另一列中的单词匹配的单词
- python - 如何在数据框的列中查找元素的编号
- android - Firebase Facebook 登录,即使在卸载应用程序后清除缓存和注销
- ios - 如何删除黄色选择突出显示?