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:
在XDocumentAdd
方法中,他们使用了likeparams
,但不需要进行类型转换
注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) )