-1 c# linq generics ienumerable
我创建了一个这样的程序,它运行良好:
using System;
class Program {
static string S(string[] a) => String.Join(',', a);
static void Main() {
string[] a = {"May", "June", "July"};
Console.WriteLine(S(a));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我稍微更改程序:
using System.Linq;
using System;
class Program {
static string S(string[] a) => String.Join(',', a);
static void Main() {
string[] a = {"May", "June", "July"};
var a2 = a.Skip(1);
Console.WriteLine(S(a2));
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
error CS1503: Argument 1: cannot convert from
'System.Collections.Generic.IEnumerable<string>' to 'string[]'
Run Code Online (Sandbox Code Playgroud)
然后我尝试将功能更改为:
static string S<T>(T a) => String.Join(',', a);
Run Code Online (Sandbox Code Playgroud)
但我只是得到这个输出:
System.Linq.Enumerable+ListPartition`1[System.String]
Run Code Online (Sandbox Code Playgroud)
编写此函数的正确方法是什么,以便接受两种类型?
字符串数组是IEnumerable<string>并且String.Join可以采用字符串的 IEnumerable 。
static string S(IEnumerable<string> a) => String.Join(',', a);
Run Code Online (Sandbox Code Playgroud)
将接受字符串数组和结果 Skip(1)
static string S(IEnumerable<string> a) => String.Join(',', a);
public static void Main()
{
string[] a = {"May", "June", "July"};
Console.WriteLine(S(a));
var a2 = a.Skip(1);
Console.WriteLine(S(a2));
}
Run Code Online (Sandbox Code Playgroud)
实例:https : //dotnetfiddle.net/0MOjL5
如果您打算支持的不仅仅是字符串(例如整数数组/枚举),那么可以将其更改为:
static string S<T>(IEnumerable<T> a) => String.Join(',', a);
Run Code Online (Sandbox Code Playgroud)
并用任何类型的数组调用,这将ToString是有意义的
Console.WriteLine(S(new[]{ 1, 2, 3})); // "1,2,3"
Run Code Online (Sandbox Code Playgroud)
请注意T,调用它时无需指定类型- 这是推断的。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |