字符串格式描述性文本

thu*_*eys 18 c#

是否可以在字符串格式说明符中添加一些描述性文本?

例:

  string.Format ("{0:ForeName} is not at home", person.ForeName); 
Run Code Online (Sandbox Code Playgroud)

在示例ForeName中添加了描述.

上面的语法显然是不正确的,但只是为了表明这个想法.

我问的原因是因为在我的情况下字符串是在资源文件中,所以在你目前只看到的资源文件中

   {0} is not at home
Run Code Online (Sandbox Code Playgroud)

在某些情况下,很难掌握其背景{0}.

编辑:

在c#6中$引入了与运算符的字符串插值,因此string.Format不再需要:

$"{person.ForeName} is not at home";
Run Code Online (Sandbox Code Playgroud)

小智 13

我们通常把意见变成我们的资源文件,例如{0} = Forename.

然后,任何可能正在翻译字符串的人都知道{0}代表什么并且可以相应地进行翻译.

此外,如果您使用ReSharper,则可以在将字符串添加到资源时同时输入注释.


art*_*kai 13

Phil Haack和Peli撰写了几篇关于默认string.format函数替代品的有趣博客文章.他们可能会对你感兴趣

基本上它们允许您在格式字符串中使用对象属性,如下所示:

string s = NamedFormat("Hello {FullName} ({EmailAdrress})!", person);
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到相关的博客文章:

也许这些博客文章中涵盖的解决方案之一可以满足您的需求.


D S*_*ley 7

对于字符串,您的方法应该有效,因为字符串将忽略任何格式说明符.但是,您可能会意外地将其用于非字符串类型,在这种情况下,字符串将被转换为格式代码或字面显示:

string.Format ("{0:ForeName} is not at home", "Johnny");  
//"Johnny is not at home"

string.Format ("{0:ForeName} will be home at {1:HomeTime}", "Johnny", DateTime.Today)
//Johnny will be home at 0o0eTi0e  -- H, h, and m are DateTime format codes.
Run Code Online (Sandbox Code Playgroud)

但是,由于您将这些存储在资源文件中,我会使用资源文件中的"注释"字段 - 您可以存储格式字符串的副本并在那里添加您的描述.