1. 程式人生 > >C# using 語句的妙用

C# using 語句的妙用

Common Lisp 中有一種“with-”語句風格,它們可以以方便的方式做 try ... finally 的工作,常用於確保檔案、資料庫連線正確關閉。

雖然在 C# 中我們可以使用 try ... finally 語句做相同的事,但有時做起來會很冗長,不方便。

另一方面 C++ 中的 RAII 確實是個非常合適的替代方式。

由此想到了使用 C# 中的 using 語句來模擬這種風格,示例程式碼見“cs-with”,其實很簡單,一學就會。

注意,儘管原理很簡單,但由此帶來的程式碼簡化卻是很明顯的,使用這種“偽with”語句比直接的多個賦值語句要簡潔得多。

using System;

namespace CSharpWith
{
    public struct WithColor : IDisposable
    {
        // Fields
        private ConsoleColor color;

        // Methods
        public WithColor(ConsoleColor color)
        {
            this.color = Console.ForegroundColor;
            Console.ForegroundColor = color;
        }

        void IDisposable.Dispose()
        {
            Console.ForegroundColor = color;
        }
    }

    public static class Input
    {
        public static string ReadLine()
        {
            using (new WithColor(ConsoleColor.Cyan))
                Console.Write(">>> ");
            using (new WithColor(ConsoleColor.Green))
                return Console.ReadLine();
        }
    }

    public static class Output
    {
        public static void WriteLine(string format, params object[] arg)
        {
            using (new WithColor(ConsoleColor.White))
                Console.WriteLine(format, arg);
        }
    }

    class Program
    {
        static void Main()
        {
            while (true)
            {
                string line = Input.ReadLine();
                if (line == null)
                    break;
                if (!string.IsNullOrWhiteSpace(line))
                    Output.WriteLine("{0}", line);
            }
        }
    }
}