VS2010和C#4.0中簡單但有趣的功能


原文地址:http://www.codeproject.com/Articles/281615/Simple-but-Interesting-Features-of-VS-2010

本文並不是對原文逐句翻譯,為了盡量通俗易懂,本人對原文有所增刪,由於本人英語水平有限,若有歧義或錯誤請指正,O(∩_∩)O~。

介紹

VS 2010和C#4.0引入了許多新功能。在這篇文章中,我來展示一些簡單但非常有用的功能。

1、隱藏選定的部分代碼

很多時候,我們想要隱藏指定的一段代碼而不是隱藏整個區域。這個在VS2010中很容易實現,只需選擇要隱藏的代碼,點擊鼠標右鍵選擇:大綱顯示->隱藏選定內容。如下圖:

你選擇的代碼就隱藏起來了。

同樣的方式,如果你想讓隱藏的代碼片段展示開,選擇隱藏的代碼片段,點擊鼠標右鍵,選擇:大綱顯示->停止隱藏當前區域。如下圖:

2、數據提示

在調試階段,這個選項給我們監測變量提供了一個簡單的方式。在vs2010中,數據提示既可以被固定在一個位置,也可以浮動。這為我們在調試階段監測變量及其值提供了方便。我們可以添加盡可能多的數據提示,他們將持續存在直至會話結束。

增加“針”到數據提示,只需將鼠標指針移到任何變量,你可以看到“針”圖標,點擊它。

您可以將您的“針”定位到任何位置。“針”為您提供了三個按鈕,關閉,從源分離(以刪除針),擴展(添加任何評論)。如下圖:

即使代碼已經調試通過,我們仍然希望看到變量/表達式在調試時的值,那么這個功能是非常有用的,如下圖:

你甚至可以導出/導入您的數據提示:調試->導出數據提示,你想要的XML文件保存到指定的位置。

選擇:調試->導入數據提示,您可以隨時訪問您的XML文件。

3、String.IsNullOrWhiteSpace
檢查指定的字符串是否是空的、null或只包含空白字符。如果字符串中包含一下這些,只則該方法將返回true。如下圖:

4、命名參數和可選參數

Vs2010中,如果參數有默認值的話,則為可選參數。

對於上面的方法,我們可以省略val1和val2,因為他們有一個默認值,可以被視為可選的。當指定我們都方法時,智能提示顯示哪些參數是可選的。

命名參數讓我們可以在調用方法時指定參數名字來給參數賦值,這種情況下可以忽略參數的順序。如下方法聲明:

即使我們的val2和val1參數順序調換了,也可以編譯通過。

5、高亮顯示

在代碼中選擇一個標識符,所有使用該標識符的地方都被高亮顯示。

在下面的例子中,我選擇了標識符VAL2,所有引用它的地方都高亮顯示了。

6、生成

如果你想添加一個類,例如:test類,你可以先寫一個test字符串,鼠標放在上面右擊:生成->類,然后項目當中會添加一個test.cs 文件。

7、動態語言支持

動態語言不執行編譯時類型檢查,只能在運行時確定對象的類型。這樣寫起來更快更容易,但我們無法看到編譯時的錯誤。

如果我們看到以前版本的C#,那么它是完全靜態的語言,但4.0又增添了新的活力元素,支持動態特征。使用dynamic關鍵字告訴編譯器關閉編譯時檢查。

那么,Object 、var、dynamic之間的區別是什么呢?

Object

Dynamic

Var

能夠存儲任何類型的值,因為對象是.NET框架下所有類型的基類。

能夠存儲任何類型的變量,類似於舊的VB語言變量。

能夠存儲任何類型的值,但它需要在聲明時初始化。

編譯器對此類型的信息很少

編譯器不知道此類型變量的任何信息

編譯安全的,編譯器擁有所有類型信息,所以在運行時不會出錯。

既可以作為方法參數也可以作為方法返回參數

既可以作為方法參數也可以作為方法返回參數

這種類型的變量只能在它的定義的范圍內使用。不可以作為方法參數進行傳遞,也不能作為方法的返回值。

使用前必須轉換為原始的類型。這可能進行裝箱、拆箱,從而增加性能開銷

不需要類型轉換,但你需要知道相關的存儲類型的屬性和方法

不需要轉換,因為編譯器擁有所有的信息進行操作

在運行時如果存儲的值是不會轉化為底層數據類型將導致問題

如果有錯誤的方法或屬性將導致問題,因為所有存儲值的信息只在運行時得到。

不會造成問題,因為編譯器有所有有關存儲值的信息。

當數據類型沒有更多的信息時比較有用

適合使用反射或動態語言或COM對象,因為我們需要編寫的代碼量較少。

得到有用的LINQ查詢的結果

8、使用ClientIDMode定義ClientID

AutoID

ClientID 值是通過將命名為控件的 ID 值的每一父級的 ID 值生成的容器。在控件的多個實例呈現的數據綁定方案中,遞增的值在控件的 ID 值之前插入。每段由下划線字符 (_) 分隔。此算法早於 ASP.NET 4. 用於 ASP.NET 的版本。

例如:

<asp:TextBox ID="txtData" runat="server" ClientIDMode="AutoID"></asp:TextBox>

當我們查看源碼,產生的clientid是ctl00_MainContent_txtData

<input name="ctl00$MainContent$txtData"

                    type="text" value="Test" id="ctl00_MainContent_txtData" />

Static

ClientID 值設置為 ID 屬性的值。如果該控件是命名容器,控件用作命名容器的層次結構的頂部為其包含的所有控件。

<div id="divVal3" runat="server" clientidmode="Static"></div>

當我們查看源碼,產生的clientid是 "divVal3"

<div id="divVal3">a= 3</div>

Predictable

此算法為數據控件中的控件使用。 ClientID 值是通過將命名為控件的 ID 值的父級的 ClientID 值生成的容器。如果該控件是生成多個行的數據綁定控件,在ClientIDRowSuffix 屬性指定的數據字段的值添加在末尾。為 GridView 控件,多個數據字段中指定。如果 ClientIDRowSuffix 屬性為空,序號添加在末尾而不是數據字段值。此數字開頭在零和由 1 增加每行的。每段由下划線字符 (_) 分隔。

<asp:GridView ID="grdTest"

runat="server" AutoGenerateColumns="false"

ClientIDMode="Predictable" >

    <Columns>

        <asp:TemplateField HeaderText="ID">

            <ItemTemplate>

                <asp:Label ID="ID"

                runat="server" Text='

                <%# Eval("ID") %>' />

            </ItemTemplate>

        </asp:TemplateField>

        <asp:TemplateField HeaderText="Name">

            <ItemTemplate>

                <asp:Label ID="Name"

                runat="server" Text='

                <%# Eval("Name") %>' />

            </ItemTemplate>

        </asp:TemplateField>

    </Columns>

</asp:GridView>

查看源碼

<table id="grdTest" 
style="border-collapse: collapse" 
cellspacing="0" rules="all" 
border="1">
    <tbody>
        <tr>
            <th scope="col">ID</th>
            <th scope="col">Name</th>
        </tr>
        <tr>
            <td><span id="
            grdTest_ID_0">1</span></td>
            <td><span id="
            grdTest_Name_0">ABC</span></td>
        </tr>
        ...
        <tr>
            <td><span id="
            grdTest_ID_1">2</span></td>
            <td><span id="
            grdTest_Name_1">XYZ</span></td>
        </tr>
    </tbody>
</table>

Inherit

控件繼承其父控件的 ClientIDMode 設置。頁的 ClientIDMode 的默認值為 Predictable。控件 ClientIDMode 的默認值是 Inherit。由於控件的默認值為 Inherit,因此默認生成模式為 Predictable

<div id="divVal1" runat="server"></div>

在不定義ClientIDMode的情況下,默認是 Inherit.

 <div id="MainContent_divVal1">a= 1, Val1= Named Val 1, Val2= Named Val 2</div>

我們有3種方式設置這些屬性:

1. 控件級別

<div id="divVal3" runat="server" clientidmode="Static"> </div>

2 .頁面級別

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master"

AutoEventWireup="true"

    CodeFile="Default.aspx.cs" Inherits="_Default" ClientIDMode="Inherit"    %>

3.應用程序級別

<system.web >

<pages clientIDMode="Predictable"> </pages>

</system.web>

 

好了,翻譯完了。發現翻譯博文比自己寫還要累。

希望此博文能給大家帶來幫助,如有不妥之處,請指正。雖然本人英語水平一般,但今后還會抽空翻譯一些優秀的博文(就怕經我翻譯后就成糟粕了),希望和大家多多交流,共同進步。


免責聲明!

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



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