我有一个这样的数组:
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]失踪了!对不起,谢谢。每个人的积分:)
答案 0 :(得分:75)
如果数组args中至少有两个对象,那么你的第一个例子应该可以正常工作。
object[] args = new object[] { "Alice", 2 };
str = String.Format("Her name is {0} and she's {1} years old", args);
答案 1 :(得分:14)
它应该按照你想要的方式工作。 String类具有以下Format方法定义:
public static string Format(string format, params object[] args);
看看你的例子中的“args”是一个对象数组,它应该适合。
答案 2 :(得分:12)
如果您不知道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
答案 3 :(得分:3)
我不确定你在问什么,但考虑到String.Format()函数的一个签名是
,其中任何一个都应该有效Public Shared Function Format(ByVal format As String, ByVal ParamArray args() As Object) As String
我从Visual Studio中复制了更多垃圾:
<强>要点:强> 将指定System.String中的格式项替换为与指定数组中相应System.Object实例的值等效的文本。
<强>参数:强> format:复合格式字符串。 args:包含零个或多个要格式化的对象的System.Object数组。
返回值 格式的副本,其中格式项已被Args中System.Object的相应实例的System.String替换。
<强>例外:强> System.ArgumentNullException:format或args为null。 System.FormatException:格式无效。 - 或 - 指示格式参数的数字小于零,或大于或等于args数组的长度。
- 在VB上哎呀,但是你明白了。
答案 4 :(得分:2)
str = String.Format("Her name is {0} and she's {1} years old", args);
当args的类型为object []时应该有效。
答案 5 :(得分:2)
你的两个例子都做同样的事情 - String.Format有一个重载,它接受一个对象[],而不是分别指定每个参数。
答案 6 :(得分:1)
你的第二个代码块会做我认为你想要完成的事情。
string.Format("Hello {0}, {1} and {2}", new object[] { "World", "Foo", "Bar" });
答案 7 :(得分:1)
你有没有试过第一行?你有没有看到它应该和第二个一样工作?