string.Format上的{{{0}}是做什么的?
在命名空间MS.Internal ,有一个名为NamedObject的类。 
它有一个奇怪的代码块:
 public override string ToString() { if (_name[0] != '{') { // lazily add {} around the name, to avoid allocating a string // until it's actually needed _name = String.Format(CultureInfo.InvariantCulture, "{{{0}}}", _name); } return _name; } 
我很好奇这个评论:
  // lazily add {} around the name, to avoid allocating a string // until it's actually needed _name = String.Format(CultureInfo.InvariantCulture, "{{{0}}}", _name); 
那“懒惰”怎么样? 它做什么懒惰?
参考资料来源全class:
 //---------------------------------------------------------------------------- // // <copyright file="NamedObject.cs" company="Microsoft"> // Copyright (C) Microsoft Corporation. All rights reserved. // </copyright> // // Description: Placeholder object, with a name that appears in the debugger // //--------------------------------------------------------------------------- using System; using System.Globalization; using MS.Internal.WindowsBase; namespace MS.Internal { /// <summary> /// An instance of this class can be used wherever you might otherwise use /// "new Object()". The name will show up in the debugger, instead of /// merely "{object}" /// </summary> [FriendAccessAllowed] // Built into Base, also used by Framework. internal class NamedObject { public NamedObject(string name) { if (String.IsNullOrEmpty(name)) throw new ArgumentNullException(name); _name = name; } public override string ToString() { if (_name[0] != '{') { // lazily add {} around the name, to avoid allocating a string // until it's actually needed _name = String.Format(CultureInfo.InvariantCulture, "{{{0}}}", _name); } return _name; } string _name; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. 
	
 你用一个大括号逃过一个大括号,例如 {{产生{ ,和}}产生} 。 
 中间的{0}像往常一样被解释 – 也就是在索引0处对参数的引用。 
 {{ {0} }} ^^ ^^^ ^^ | | | | | +--- Closing curly brace | +------ Parameter reference +---------- Opening curly brace 
最终的结果是用大括号括起来的参数零的值:
 var res = string.Format("{{{0}}}", "hello"); // produces {hello} 
那“懒惰”怎么样?
他们称这个替代“渴望”的执行方式为懒惰:
 internal class NamedObject { public NamedObject(string name) { if (String.IsNullOrEmpty(name)) throw new ArgumentNullException(name); if (name[0] != '{') { // eagerly add {} around the name _name = String.Format(CultureInfo.InvariantCulture, "{{{0}}}", name); } else { _name = name; } } public override string ToString() { return _name; } string _name; } 
这个实现会立即添加花括号,即使它不知道花括号中的名字是需要的。
那“懒惰”怎么样? 它做什么懒惰?
 懒惰来自于它之前的if (_name[0] != '{') 。 
 它仅在第一次请求时才更改_name字段。 
 和大家已经指出的一样, String.Format("{{{0}}}", _name); 应被解读为"{{ {0} }}"或"\{ {0} \}" 。 内部{0}是用第一个参数replace的实际字段,外部{{和}}是一个特殊的符号来获得单个{} 
  {{和}}只是给你文字{和} 。  (逃离的大括号) 
 所以,如果你有{{{0}}} ,你放弃foo ,输出将是{foo} 
 var value = "value"; String.Format(CultureInfo.InvariantCulture, "{{{0}}}", value); // will output {value}