C# String.Format 参数

42

我有一个这样的数组:

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]!对不起,谢谢大家。每个人都得分 :)


18
你有问题吗? - leppie
8个回答

86

如果在数组args中至少有两个对象,则您的第一个示例应该可以正常工作。

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

16

它应该按照您想要的方式工作。String类具有以下格式方法定义:

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

考虑到你的示例中 "args" 是一个对象数组,那么它应该是可以适用的。


15
如果您不知道参数数组中有多少个元素,请尝试使用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());

这与微软的一个示例非常相似:

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


3
我不确定你在问什么,但是这两个都可以工作,因为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 等效项替换的 format 的副本。

异常: System.ArgumentNullException:format 或 args 为 null。 System.FormatException:format 无效。-或- 指示要格式化的参数的数字小于零或大于等于 args 数组的长度。

-- VB上出了点问题,但你明白我的意思。


1
我喜欢你提供的API定义是VB。;-) - Dan Esparza

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

当args为object[]类型时应该可以工作。


2

你提供的两个示例都是相同的 - String.Format有一个重载,它接受一个对象数组而不是分别指定每个参数。


1

你的第二个代码块会实现你想要完成的功能。

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

1

你试过第一行吗?你看到它应该和第二行一样工作了吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接