C# 中的語法糖


1.   using 代替了 try…catch…finally                                             

因為之前是學 Java 的,在連接數據庫或者進行文件讀寫操作時很自然的就使用了 try…catch…finally…,在 C# 中這樣寫也肯定可以但是還有一種更優雅的寫法(我看到別人這樣說),那就是使用 using 關鍵字。

在使用各種流或者連接時【文件讀寫流,數據庫連接等等】,在使用完畢后,需要關閉流和連接,(這里不討論數據庫連接需要歸還到池子)

之前的代碼是這樣的:

public void Test1()
        {
            SqlConnection conn = null;
            SqlDataReader reader = null;
            try
            {
                string strConn = ConfigurationManager.ConnectionStrings["strConn"].ToString();
                conn = new SqlConnection(strConn);
                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = "XXXXXXXXX";
                reader = cmd.ExecuteReader();
                //一些操作
            }
            catch (Exception e)
            {
                Console.WriteLine("出錯啦!!");
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                    conn.Dispose();
                }
                if (reader != null)
                {
                    reader.Dispose();
                }
            }
        }

 

使用了 using 關鍵字之后是這樣的:

public void Test2()
        {
            string strConn = ConfigurationManager.ConnectionStrings["strConn"].ToString();
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "XXXXXXXXXX";
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        //一些操作
                    }
                }
            }
        }

關於 using 關鍵字,有必要弄清楚“托管資源”和“非托管資源”,只有非托管資源才需要使用 using 關鍵字。

關於非托管資源和托管資源可以看這篇博客【      】

2.   動態對象,字段的省略                                                        

還記得在 Java 中寫字段的讀寫方法時,快捷鍵用的相當的 6 ,那么 C# 中沒有與其類似的對象呢,快捷鍵當然有,不過還有更猛的,就是不用寫字段了,只管寫讀寫屬性就好,編譯器會自動根據讀寫屬性去生成字段。

public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Sex { get; set; }
    }

編譯器在編譯時就會自動生成字段,下面是編譯過后的 IL代碼目錄,可以看到最下面生成了三個字段。

image

3.  兩個問號“??”的作用                                                                

一個問號見過,在三目元算符里面就是。兩個問號呢?

之前見到這樣的寫法也是比較奇葩的。看代碼吧:

public class Program
    {
        public static void Main(string[] args)
        {
            string a = null;
            var b = a ?? "woaini";
            Console.WriteLine("b : " + b);
            Console.WriteLine("=============");
            a = "msym";
            var c = a ?? "woaini";
            Console.WriteLine("c: " + c);

        }
    }

運行看結果:

image

結論就是:問號左邊的是 null 得話,那么得到就是問號右邊的值,反之就是問號左邊的值。

4.   擴展方法                                                                                 

這個可以看這個博客C# 中的擴展方法

還有這個博客,擴展方法的運用擴展方法的運用

其實我對擴展方法的理解,就是一個特殊的工具類,只不過和類型綁定在一起了。這只是我暫時的理解,因為還沒涉及到底層。

 

5.  對象初始化器和匿名對象                                                      

這點和 JavaScript 的對象直接量就很像了。

          //對象初始化器
            Person p = new Person {
                Name = "andy",
                Age = 24
            };
            //匿名對象
            var p2 = new { Name = "dimo", Age = 24 };
            Console.WriteLine(p.Name);
            Console.WriteLine(p2.Name);

【未完待續】

 

回到主頁


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM