1

我可以从 C# 中的一个元素隐式创建一个数组吗?

例如,我有这个方法

public void MyMethod(string[] arrayString)

在我的代码中的某个时刻,我有

string str = "myStr";
MyMethod(str)

当然,第二个 linhe 是一个错误,因为我正在传递一个字符串,而 MyMethod 需要一个字符串 []。是否有任何干净的方法来调用 MyMethod 而不使用

MyMethod(new string[] {str})
4

5 回答 5

5

如果您使用params数组,这会很好:

public void MyMethod(params string[] arrayString)

string str = "myStr";
MyMethod(str)
于 2012-10-03T15:58:51.480 回答
1

我知道的唯一方法是重载方法,这样你也有

MyMethod(string)
{
    return MyMethod(new string[] {str});
}

你也许可以用一个params数组来做,但我不完全确定如果你尝试传入一个字符串数组而不是多个字符串会如何工作。

于 2012-10-03T16:01:04.303 回答
1

我只想添加第二个重载MyMethod

public void MyMethod(string str)
{
    MyMethod(new[]{str});
}
于 2012-10-03T16:10:30.110 回答
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));
于 2012-10-03T17:07:56.930 回答
0

扩展方法怎么样?

public static T[] WrapInArray<T>(this T t)
{
    return new T[]{ t };
}
于 2012-10-03T16:00:04.610 回答