﻿# 如何在 C# 中使用關鍵字當屬性名稱 ( ASP.NET MVC )

最近在看 [Oxite](http://oxite.net/) 原始碼的時候，發現一段有趣的程式碼，感覺很像 Perl 的陣列，但我從未在 C# 程式中看到有人這麼用，如下範例：

```
<%= Html.TextBox("username", Request["username"], 
       new { 
          id = "login_username", 
          @class = "text", 
          tabindex = "1", 
          title = Localize("Your username...")
       }
   ) %>
```

我覺得奇怪的地方是在 Html.TextBox 第三個參數的地方用的雖然是一個[匿名型別](http://msdn.microsoft.com/zh-tw/library/bb397696.aspx)，但有個屬性設定時竟然是 **@class** 耶，第一眼看到的感覺是「好奇怪」的寫法，難道又是什麼未公開的密技嗎？因為我從未這樣寫過。

這段程式是 ASP.NET MVC 的 View 常用的一個 HTML Helpers 寫法，因為 ASP.NET MVC 的 View 經常需要透過 HTML Helpers 輸出標籤或表單欄位，而在設定時經常需要設定額外的 HTML 屬性(Attributes)，所以才需要第三個參數設定，但是若要設定 HTML 中的 class 屬性時，就遇到大災難了！因為 class 是 [C# 關鍵字](http://msdn.microsoft.com/zh-tw/library/x53a06bb.aspx)(保留字)，照裡說不能出現在屬性、欄位、方法、變數名稱中。

經[查證](http://msdn.microsoft.com/zh-tw/library/x53a06bb.aspx)得知，原來在 C# 中還是可以使用保留字當識別名稱，只要前面加上一個小老鼠符號 ( @ ) 即可！

這個技巧對於 [ASP.NET MVC](http://www.asp.net/mvc/) 開發人員來說非常的重要，不然每次用 HTML Helper 時都不能設定 class 屬性時，心中的怒火應該會越燒越旺！^\_^

**相關連結**

-   [C# 關鍵字](http://msdn.microsoft.com/zh-tw/library/x53a06bb.aspx)
-   ASP.NET MVC Preview: Using The MVC UI Helpers
-   [How to: Render a Form in MVC Using HTML Helpers](https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/views/creating-custom-html-helpers-cs)
-   [Understanding Views, View Data, and HTML Helpers](http://www.asp.net/learn/mvc/tutorial-04-cs.aspx)
-   [Creating Custom HTML Helpers](http://www.asp.net/learn/mvc/tutorial-09-cs.aspx)
