Прежде всего, я очень сожалею об этом названии, просто невозможно суммировать это в 150 букв.
Допустим, я хочу сделать varable, который меняет цвет текста на зеленый для всего, что вы печатаете в его фигурных скобках, однако, когда фигурные скобки закрыты, он меняет цвет текста консоли обратно на серый для следующих вещей, которые я печатаю.
Короче говоря, я хотел сделать следующее:
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("test");
Console.ForegroundColor = ConsoleColor.gray;
но так как у меня есть много в моем коде, я хочу сократить это так:
mycmd(green,gray)
{
Console.WriteLine("test");
}
Возможно ли что-то подобное?
Вы могли бы сделать что-то вроде этого
public static void ColorAndWrite(ConsoleColor c1, ConsoleColor c2, string text)
{
Console.ForegroundColor = c1;
Console.WriteLine(text);
Console.ForegroundColor = c2;
}
использование
ColorAndWrite(ConsoleColor.Black,ConsoleColor.Blue, "asdads");
или использовать Action
public static void ColorFancy(ConsoleColor c1, ConsoleColor c2, Action action)
{
Console.ForegroundColor = c1;
action.Invoke();
Console.ForegroundColor = c2;
}
использование
ColorFancy(ConsoleColor.Black, ConsoleColor.Blue, () => Console.WriteLine("dfgdfgdfgdfg"));
// or
ColorFancy(ConsoleColor.Black, ConsoleColor.Blue, () =>
{
// lots of things here
Console.WriteLine("dfgdfgdfgdfg");
});
Вы можете создать IDisposable
реализацию и злоупотребление, using
для этого
public class ConsoleColorBlock : IDisposable
{
public ConsoleColorBlock(ConsoleColor c1, ConsoleColor c2)
{
// Set color to c1
}
public void Dispose()
{
// Set color to c2
}
}
А потом в вашем коде
using(new ConsoleColorBlock(...))
{
// Whatever code you want
}
Обратите внимание, что код в методе Dispose
будет выполнен, даже если код внутри using
выдает исключение.
using(ConsoleColorBlock.Red()) { Console.WriteLine("Alarm!!!"); }