隐式将对象强制转换为包含一个元素的数组。可能吗?

时间:2012-10-03 15:57:04

标签: c# c#-4.0

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

例如,我有这个方法

public void MyMethod(string[] arrayString)

在我的代码的某些时候我有

string str = "myStr";
MyMethod(str)

当然第二个linhe是一个错误,因为我传递一个字符串,而MyMethod期望一个字符串[]。 有没有干净的方法可以在不使用

的情况下调用MyMethod
MyMethod(new string[] {str})

5 个答案:

答案 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 };
}