私はこのような配列を持っています:
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]がありませんでした!ごめんなさい、ありがとう。すべてのポイント:)
配列argsに少なくとも2つのオブジェクトがあれば、最初の例は問題なく動作するはずです。
object[] args = new object[] { "Alice", 2 };
str = String.Format("Her name is {0} and she's {1} years old", args);
それは、あなたが望むように機能するはずです。 Stringクラスには、次のFormatメソッド定義があります。
public static string Format(string format, params object[] args);
あなたの例の「引数」がオブジェクトの配列であるように見えると、それはちょうど収まるはずです。
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
私はあなたが何を求めているのか分かりませんが、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では、ポイントを取得します。
str = String.Format("Her name is {0} and she's {1} years old", args);
Argsがobject []型の場合に機能するはずです。
どちらの例も同じことを行います。String.Formatには、各引数を個別に指定する代わりに、object []を受け入れるオーバーロードがあります。
2番目のコードブロックは、あなたが達成しようとしていると思うことを行います。
string.Format("Hello {0}, {1} and {2}", new object[] { "World", "Foo", "Bar" });
最初の行も試しましたか? 2番目と同じように動作することを確認しましたか?