包装 String.Join 方法
Wrap String.Join method
我创建了一个这样的程序,运行良好:
using System;
class Program {
static string S(string[] a) => String.Join(',', a);
static void Main() {
string[] a = {"May", "June", "July"};
Console.WriteLine(S(a));
}
}
但是如果我稍微改变一下程序:
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));
}
}
我收到这个错误:
error CS1503: Argument 1: cannot convert from
'System.Collections.Generic.IEnumerable<string>' to 'string[]'
然后我尝试将功能更改为:
static string S<T>(T a) => String.Join(',', a);
但我只得到这个输出:
System.Linq.Enumerable+ListPartition`1[System.String]
编写此函数的正确方法是什么,以便接受两种类型?
一个字符串数组是 IEnumerable<string>
并且 String.Join
可以接受一个 IEnumerable 字符串。
static string S(IEnumerable<string> a) => String.Join(',', a);
将接受字符串数组和 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));
}
实例:https://dotnetfiddle.net/0MOjL5
如果您打算支持的不仅仅是字符串(例如 array/enumerable 的整数),那么可以将其更改为:
static string S<T>(IEnumerable<T> a) => String.Join(',', a);
并使用任何类型的数组调用,这将 ToString
变成有意义的东西
Console.WriteLine(S(new[]{ 1, 2, 3})); // "1,2,3"
注意调用它时不需要指定类型 T
- 这是推断的。
另一个选项,编码为JSON:
using C = System.Console;
using J = System.Text.Json.JsonSerializer;
using System.Linq;
class Program {
static void Main() {
string[] a = {"May", "June", "July"};
var a2 = a.Skip(1);
C.WriteLine(J.Serialize(a) + J.Serialize(a2));
}
}
https://docs.microsoft.com/dotnet/api/system.text.json.jsonserializer
我创建了一个这样的程序,运行良好:
using System;
class Program {
static string S(string[] a) => String.Join(',', a);
static void Main() {
string[] a = {"May", "June", "July"};
Console.WriteLine(S(a));
}
}
但是如果我稍微改变一下程序:
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));
}
}
我收到这个错误:
error CS1503: Argument 1: cannot convert from
'System.Collections.Generic.IEnumerable<string>' to 'string[]'
然后我尝试将功能更改为:
static string S<T>(T a) => String.Join(',', a);
但我只得到这个输出:
System.Linq.Enumerable+ListPartition`1[System.String]
编写此函数的正确方法是什么,以便接受两种类型?
一个字符串数组是 IEnumerable<string>
并且 String.Join
可以接受一个 IEnumerable 字符串。
static string S(IEnumerable<string> a) => String.Join(',', a);
将接受字符串数组和 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));
}
实例:https://dotnetfiddle.net/0MOjL5
如果您打算支持的不仅仅是字符串(例如 array/enumerable 的整数),那么可以将其更改为:
static string S<T>(IEnumerable<T> a) => String.Join(',', a);
并使用任何类型的数组调用,这将 ToString
变成有意义的东西
Console.WriteLine(S(new[]{ 1, 2, 3})); // "1,2,3"
注意调用它时不需要指定类型 T
- 这是推断的。
另一个选项,编码为JSON:
using C = System.Console;
using J = System.Text.Json.JsonSerializer;
using System.Linq;
class Program {
static void Main() {
string[] a = {"May", "June", "July"};
var a2 = a.Skip(1);
C.WriteLine(J.Serialize(a) + J.Serialize(a2));
}
}
https://docs.microsoft.com/dotnet/api/system.text.json.jsonserializer