1

C# で 1 つの要素から暗黙的に配列を作成できますか?

たとえば、私はこの方法を持っています

public void MyMethod(string[] arrayString)

私のコードのある時点で私は持っています

string str = "myStr";
MyMethod(str)

もちろん、MyMethod が string[] を予期しているときに文字列を渡しているため、2 番目の行はエラーです。使用せずに 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

完全を期すために、ここに別のいくつかのオプションがありますが、確かに推奨されていません-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 に答える
1

2番目のオーバーロードを追加するだけですMyMethod

public void MyMethod(string str)
{
    MyMethod(new[]{str});
}
于 2012-10-03T16:10:30.110 に答える
0

拡張メソッドはどうですか?

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