如何解决包装String.Join方法
我创建了一个像这样的程序,效果很好:
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(',"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
如果您打算支持的不仅仅是字符串(例如,数组/整数),则可以将其更改为:
static string S<T>(IEnumerable<T> a) => String.Join(',a);
并用任何会ToString
进行有意义的操作的数组进行调用
Console.WriteLine(S(new[]{ 1,2,3})); // "1,3"
请注意,调用时无需指定类型T
-推断出来。
另一个选项,编码为JSON:
using C = System.Console;
using J = System.Text.Json.JsonSerializer;
using System.Linq;
class Program {
static void Main() {
string[] a = {"May","July"};
var a2 = a.Skip(1);
C.WriteLine(J.Serialize(a) + J.Serialize(a2));
}
}
https://docs.microsoft.com/dotnet/api/system.text.json.jsonserializer
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。