Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么params不接受泛型类型?_C#_Params - Fatal编程技术网

C# 为什么params不接受泛型类型?

C# 为什么params不接受泛型类型?,c#,params,C#,Params,这是我的设想 功能: public String StringConcat(params String[] parameter) { String l_strReturnValue = String.Empty; for (Int32 l_nIndex = 0; l_nIndex < parameter.Length; l_nIndex++) { l_strReturnValue += paramete

这是我的设想

功能:

    public String StringConcat(params String[] parameter)
    {
        String l_strReturnValue = String.Empty;
        for (Int32 l_nIndex = 0; l_nIndex < parameter.Length; l_nIndex++)
        {
            l_strReturnValue += parameter[l_nIndex];
        }
        return l_strReturnValue;
    }
那么,如何在不进行转换的情况下使用该函数呢

注1:

在XDocument
Add
方法中,他们使用了like
params
,但不需要进行类型转换

注2:


这篇文章的目的不是添加字符串,只是想了解更多关于
params

的限制
Select(X=>X)
的返回类型将是
IEnumerable
——而不是数组。因此,您需要另一个过载:

public String StringConcat(IEnumerable<string> parameter)
这实际上只是调用
XDocument.Add(object)
,它会注意到参数实现了
IEnumerable

关键字的限制是参数必须是数组类型

llstest.Select(X=>X)
是一个
IEnumerable
,不是数组,因此它与形式参数类型不匹配。它不起作用的原因与您尝试传递普通的
int
时不起作用的原因相同

要使其正常工作,您应该添加该方法的另一个重载:

public String StringConcat(IEnumerable<string> parameter)
{
    // your code here
}
公共字符串StringConcat(IEnumerable参数)
{
//你的代码在这里
}

这是设计上对参数的限制,因为如果您使用

  public String StringConcat(params object[] parameter)
使用IEnumerable调用时,无法确定该参数是单个参数还是应该在可枚举项上迭代。例如,在没有此限制的情况下

  StringConcat( l_lstTest.Select(X => X) )

IEnumerable应该是参数列表的一个元素,或者是参数列表?

谢谢。。。。请您发布一下,为什么您建议使用
Foreach
而不是
for
循环
Foreach
是对象类型。。。。因此,与索引类型(
for
)循环相比,它将花费更多的时间???@Pramodh:
foreach
是一个更高级别的抽象-代码更干净,并且更紧密地表达了您试图实现的目标。事实上,数组上的
foreach
循环无论如何都会使用数组索引器,但在发现问题之前,通常不应该关心该细节级别的性能。对于大型数组,代码的性能非常糟糕,因为您使用了字符串串联-与效率低下相比,
foreach
for
之间的任何差异都是微不足道的。
public String StringConcat(IEnumerable<string> parameter)
{
    // your code here
}
  public String StringConcat(params object[] parameter)
  StringConcat( l_lstTest.Select(X => X) )