有沒有人知道如何縮進/縮進並能夠設置縮進級別的Console的TextWriter。瞭解縮進/取消縮進/縮進級別的.NET控制檯TextWriter
5
A
回答
7
試試這個:
class MyConsole : TextWriter {
TextWriter mOldConsole;
bool mDoIndent;
public MyConsole() {
mOldConsole = Console.Out;
Console.SetOut(this);
}
public int Indent { get; set; }
public override void Write(char ch) {
if (mDoIndent) {
mDoIndent = false;
for (int ix = 0; ix < Indent; ++ix) mOldConsole.Write(" ");
}
mOldConsole.Write(ch);
if (ch == '\n') mDoIndent = true;
}
public override System.Text.Encoding Encoding {
get { return mOldConsole.Encoding; }
}
}
使用範例:
class Program {
static MyConsole Output = new MyConsole();
static void Main(string[] args) {
Console.WriteLine("Hello");
Output.Indent++;
Console.WriteLine("world");
Output.Indent--;
Console.WriteLine("Back");
Console.ReadLine();
}
}
2
我通常只是做這樣的事情(我的應用程序類中):
static TextWriter tw;
static int indentLevel = 0;
static void Indend()
{
indentLevel++;
}
static void Outdent()
{
indentLevel--;
}
static void WriteLine(string s)
{
tw.WriteLine(new string('\t', indentLevel) + s);
}
static void WriteLine()
{
tw.WriteLine();
}
,然後如
using (tw = new StreamWriter(outputName))
{
WriteLine(string.Format("namespace {0}", nameSpace));
WriteLine("{");
Indend();
foreach (string s in dataSourceItems)
GenerateProc(s);
Outdent();
WriteLine("}");
}
如果你願意,你明顯可以把它封裝在一個單獨的類中。
9
System.CodeDom.Compiler.IndentedTextWriter
這是建立在.NET框架在System.dll中,但它不是超級強大的。它應該在約束用法下工作(如在字符串中沒有換行符)。
static void Main(string[] args)
{
using (System.CodeDom.Compiler.IndentedTextWriter writer = new System.CodeDom.Compiler.IndentedTextWriter(Console.Out, " "))
{
Console.SetOut(writer);
writer.Indent = 0;
writer.WriteLine("test");
writer.Indent = 1;
writer.WriteLine("What happens\nif there are line-\nbreak in the middle?");
writer.Indent = 2;
writer.WriteLine("another test");
writer.Indent = 3;
writer.WriteLine("and another test");
writer.Indent = 0;
writer.WriteLine("hello");
}
Console.ReadLine();
}
+1
+1代表很好的示例代碼 – AMissico 2010-03-31 16:24:22
相關問題
- 1. 縮進錯誤:取消縮進不匹配任何外部縮進級別
- 2. ...縮進錯誤:取消縮進不匹配任何外部縮進級別」
- 3. 取消縮進不符合任何外部的縮進級別
- 4. UDF:IndentationError:取消縮進不匹配任何外部縮進級別
- 5. IndentationError:取消縮進不匹配任何外部縮進級別
- 6. Python的IndentationError取消縮進不匹配任何外部縮進級別
- 7. 取消縮進不符合任何外部的縮進級別Coursera分配
- 8. Django的取消縮進不匹配任何外部縮進級別
- 9. xmllint中的縮進級別
- 10. IndentationError:取消縮進不匹配任何外部縮進級別教程
- 11. IndentationError:取消縮進不匹配任何外部縮進級別蟒蛇
- 12. PYTHON錯誤:IndentationError:取消縮進不匹配任何外部縮進級別
- 13. xamDataGrid - 縮進嵌套級別
- 14. 在newline之後縮進新的縮進級別vim
- 15. 使用PEG.js解析縮進級別
- 16. 縮進控制檯中的新行
- 17. 「縮進錯誤:unindent不匹配任何外部縮進級別」
- 18. 縮進錯誤:unindent不匹配任何外部縮進級別
- 19. YAML縮進級別是否有限制?
- 20. Netbeans中的取消縮進
- 21. vim中的塊縮進/取消縮進python代碼
- 22. 取消縮進不tensorflow
- 23. 獲取emacs的訪問標籤縮進以添加縮進級別
- 24. 識別縮進列?
- 25. 忽略/處理「意外縮進」錯誤。獲取縮進堆棧級別
- 26. 如何縮進左括號的級別?
- 27. 縮進列的縮進列與GUID
- 28. ScintillaNET中的縮進和智能縮進
- 29. 縮進
- 30. tkinter強制縮進
不錯,按預期處理換行符。 – AMissico 2010-03-31 15:50:34
Anywhay「擴展」控制檯以使語法更自然,如Console.Indent ++; – AMissico 2010-03-31 15:51:44
@AMISSico:不,控制檯是密封的。 – 2010-03-31 16:10:02