web-dev-qa-db-ja.com

C#String.Format args

私はこのような配列を持っています:

object[] args

そして、それらの引数を文字列に挿入する必要があります、例えば:

str = String.Format("Her name is {0} and she's {1} years old", args);

の代わりに:

str = String.Format("Her name is {0} and she's {1} years old", args[0], args[1]);

注:実際には、コードの最初の行が機能しました!しかし、args [1]がありませんでした!ごめんなさい、ありがとう。すべてのポイント:)

30
Fabio Milheiro

配列argsに少なくとも2つのオブジェクトがあれば、最初の例は問題なく動作するはずです。

object[] args = new object[] { "Alice", 2 };
str = String.Format("Her name is {0} and she's {1} years old", args);
76
csharptest.net

それは、あなたが望むように機能するはずです。 Stringクラスには、次のFormatメソッド定義があります。

public static string Format(string format, params object[] args);

あなたの例の「引数」がオブジェクトの配列であるように見えると、それはちょうど収まるはずです。

14
Stephen

Arguments配列に含まれる配列要素の数がわからない場合は、string.Join()を使用してみてください。

string.Format("Arguments passed in to the program are: {0}", string.Join(" ", args));

あなたの例では特に:

string.Format("Her name is {0} years old", string.Join(" and she's ", args));

個人的に、私は配列オブジェクトのハードコードされた構造が好きではありません。これはアプリケーション全体で覚えるには多すぎて、維持するのが難しくなります。むしろ、配列を受け入れるコンストラクターを使用して引数を「Person」オブジェクトに変換し、ToString()をオーバーロードして、オブジェクトメンバーに関する特定の情報を表示します。

class Person
{
    private string m_sName;
    private string m_sAge;

    public Person(string[] args)
    {
        m_sName = args[0];
        m_sAge = args[1];
    }

    public override string ToString()
    {
        return string.Format("Her name is {0} and she's {1} years old.", m_sName, m_sAge);
    }
}

したがって、「Person」オブジェクトを作成し、呼び出されたときにメッセージを表示できます。

var oNewPerson = new Person(args);
console.WriteLine(oNewPerson.ToString());

これは、Microsoftの例と非常によく似ています。

http://msdn.Microsoft.com/en-us/library/ms173154(v = vs.80).aspx

13
Rusty Naumann

私はあなたが何を求めているのか分かりませんが、String.Format()関数のシグネチャの1つが

Public Shared Function Format(ByVal format As String, ByVal ParamArray args() As Object) As String

Visual Studioからコピーしたその他のジャンク:

Summary:指定されたSystem.String内の書式項目を、指定された配列内の対応するSystem.Objectインスタンスの値に相当するテキストに置き換えます。

パラメータ: format:複合フォーマット文字列。 args:フォーマットする0個以上のオブジェクトを含むSystem.Object配列。

戻り値:書式項目が、argsのSystem.Objectの対応するインスタンスに相当するSystem.Stringに置き換えられた書式のコピー。

例外: System.ArgumentNullException:formatまたはargsがnullです。 System.FormatException:フォーマットが無効です。 -または-formatの引数を示す数値が0より小さいか、args配列の長さ以上です。

-Oops VBでは、ポイントを取得します。

3
Cᴏʀʏ
str = String.Format("Her name is {0} and she's {1} years old", args);

Argsがobject []型の場合に機能するはずです。

2
Henk Holterman

どちらの例も同じことを行います。String.Formatには、各引数を個別に指定する代わりに、object []を受け入れるオーバーロードがあります。

2
Lee

2番目のコードブロックは、あなたが達成しようとしていると思うことを行います。

string.Format("Hello {0}, {1} and {2}", new object[] { "World", "Foo", "Bar" });
1
sshow

最初の行も試しましたか? 2番目と同じように動作することを確認しましたか?

1
leppie