我可以从C#中的单个元素隐式创建一个数组吗?
例如,我有这个方法
public void MyMethod(string[] arrayString)
在我的代码的某些时候我有
string str = "myStr";
MyMethod(str)
当然第二个linhe是一个错误,因为我传递一个字符串,而MyMethod期望一个字符串[]。 有没有干净的方法可以在不使用
的情况下调用MyMethodMyMethod(new string[] {str})
答案 0 :(得分:5)
如果你使用params
数组,这没关系:
public void MyMethod(params string[] arrayString)
string str = "myStr";
MyMethod(str)
答案 1 :(得分:1)
我知道的唯一方法是重载方法,以便你也有
MyMethod(string)
{
return MyMethod(new string[] {str});
}
您可以使用params
数组执行此操作,但如果您尝试传入字符串数组而不是多个字符串,我不完全确定它是如何工作的。
答案 2 :(得分:1)
我只想添加MyMethod
public void MyMethod(string str)
{
MyMethod(new[]{str});
}
答案 3 :(得分:1)
为了完整起见,这里有另外几个选项,但肯定不推荐 - 我会在接受的答案中使用params
。
MyMethod(Enumerable.Repeat(str, 1).ToArray());
我偶尔也会看到这一点,但除非你不知道数组初始化器,否则很难证明:
T[] MakeArray<T>(params T[] elements)
{
return elements;
}
因此使用:
string[] grades = MakeArray("A", "B", "C", "D", "F", "Incomplete");
或者,在这种情况下:
MyMethod(MakeArray(str));
答案 4 :(得分:0)
扩展方法怎么样?
public static T[] WrapInArray<T>(this T t)
{
return new T[]{ t };
}