首页 > 解决方案 > 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;
        }
    }
}

标签: c#.nettuplesc#-7.0valuetuple

解决方案


在方法签名中,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)

推荐阅读