Có ai có hoặc biết về TextWriter cho Bảng điều khiển hiểu cách thụt lề/không liên quan và có khả năng đặt mức thụt lề không.Bảng điều khiển .NET TextWriter hiểu được thụt lề/không liên quan/thụt lề
5
A
Trả lời
7
Hãy thử điều này: sử dụng
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; }
}
}
mẫu:
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
Tôi thường chỉ làm một cái gì đó như thế này (trong lớp ứng dụng của tôi):
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();
}
và sau đó ví dụ
using (tw = new StreamWriter(outputName))
{
WriteLine(string.Format("namespace {0}", nameSpace));
WriteLine("{");
Indend();
foreach (string s in dataSourceItems)
GenerateProc(s);
Outdent();
WriteLine("}");
}
Bạn rõ ràng có thể gói gọn trong lớp học riêng nếu bạn muốn.
9
System.CodeDom.Compiler.IndentedTextWriter
này được xây dựng vào .Net Framework trong system.dll, nhưng nó không phải là siêu mạnh mẽ . Nó sẽ hoạt động dưới mức sử dụng hạn chế (như không có ký tự dòng mới trong chuỗi).
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 để có mã ví dụ tốt – AMissico
Các vấn đề liên quan
- 1. Thụt lề liên tục Eclipse
- 2. Bảng điều khiển Dock .NET?
- 3. d3.js Cây thụt lề với các liên kết thẳng
- 4. xoá bỏ thụt lề thụt lề với CSS
- 5. Nhật ký bảng điều khiển Firebug Net
- 6. Giảm bớt chuỗi JSON thụt lề trong .NET
- 7. Tại sao COBOL phải được thụt lề?
- 8. vi thụt lề
- 9. Thụt lề thụt đầu dòng với CSS trong Vim
- 10. Khoảng trống và thụt lề trong F #
- 11. Bỏ thụt lề trong Netbeans
- 12. Ứng dụng Giao diện điều khiển .Net không hiển thị Bảng điều khiển
- 13. Khó khăn thụt lề Emacs
- 14. <span> văn bản được thụt lề indent
- 15. Thụt lề JSON trong PHP
- 16. Ràng buộc khóa thụt lề Xcode
- 17. Dừng ứng dụng bảng điều khiển .net bị đóng
- 18. Tìm kiếm điều khiển trình soạn thảo .NET "văn bản"
- 19. Làm cách nào để thụt lề danh sách hiểu trong CoffeeScript?
- 20. Liên kết bảng điều khiển JSF lên đầu trang
- 21. java Liên kết của bảng điều khiển BoxLayout
- 22. vẽ một nút trong bảng điều khiển winform trong khi bảng điều khiển được cuộn
- 23. Thay đổi định dạng thụt lề vim
- 24. Lexer nhận ra khối thụt lề
- 25. thay đổi thụt lề trong emacs ess
- 26. vim: C++ trở lại thụt lề với #
- 27. Không thể thụt lề lớp con UITableViewCell
- 28. XCode: Thụt lề đối số hàm
- 29. Thụt lề nhiều dòng: Phím tắt
- 30. Cảnh báo thụt lề Eclipse Eclipse
Đẹp, xử lý ký tự dòng mới như mong đợi. – AMissico
Bất cứ điều gì để "mở rộng" Console để làm cho cú pháp tự nhiên hơn, chẳng hạn như Console.Indent ++; – AMissico
@AMissico: Không, Bảng điều khiển được niêm phong. –