C#String.Format args

我有一个像这样的数组:

object[] args 

并且需要在字符串中插入这些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中至少有两个对象,那么您的第一个示例应该可以正常工作。

 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); 

看看你的例子中的“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()函数的一个签名是

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

我从Visual Studio复制的更多垃圾:

摘要:使用与指定数组中相应System.Object实例的值等效的文本替换指定System.String中的格式项。

参数: format:复合格式字符串。 args:包含零个或多个要格式化的对象的System.Object数组。

返回值:格式的副本,其中格式项已替换为args中System.Object的相应实例的System.String等效项。

exception: System.ArgumentNullException:format或args为null。 System.FormatException:格式无效。 – 或 – 指示格式参数的数字小于零,或大于或等于args数组的长度。

– 在VB上哎呀,但你明白了。

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

当args是object []类型时应该工作。

你的例子都做同样的事情 – String.Format有一个重载接受一个对象[]而不是分别指定每个参数。

你有没有试过第一线? 你有没有看到它应该和第二个一样?

你的第二个代码块会做我认为你想要完成的事情。

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