【发布时间】:2020-03-26 11:27:26
【问题描述】:
我有一个接受 string[] 参数的方法
public static void MyMethod(string[] s1, string[] s2, string[] s3, string[] s4)
{
}
有时我的情况是,我想使用普通的string 而不是string[]
是否可以将方法的通用参数设置为接受数组或纯文本?
我需要什么(例子):
MyMethod(["a", "b"], ["s", "m"], ["i", "k"], ["a", "e"])
MyMethod(["a", "p"], "u", ["v", "p"], "e")
MyMethod("a", "b", "b", "d")
和其他组合
【问题讨论】:
-
尝试类似:
public static void MyMethod(params string[] s)和重载public static void MyMethod(params string s) -
这不是泛型所做的。
string不是string[],通用参数即使是也无济于事。正如其他人所说,这就是函数重载的目的。或者,您的调用者可以简单地将单个字符串放入数组中 来调用此方法。 -
你可以为输入参数创建一个自己的类——比如
StringInput类,它可以隐藏包含一个字符串或一个数组的细节。它可以有多个具有不同类型的构造函数,因此可以从数组和单个字符串创建它,并且它可以具有像IsSingleString()或GetStringsAsArray()这样的方法来帮助您以通用方式实现逻辑。 -
@DontVoteMeDown
params应该是一维数组。恐怕您的第二次重载甚至无法编译! -
@Annosz 是的,我也建议这样做,加上从 string 和 string[] 到该类型的隐式转换运算符,然后使用参数使函数接受该类型。