2013-10-02 33 views
7

我正在使用SimpleMembership提供程序並添加了要在註冊時保存的其他字段。C#警告中的冗餘顯式屬性名稱

爲了節省註冊時的額外字段,我使用了在任何地方使用的方法,例如, Link

我用叫我HttpPost的ActionResult以下SimpleMembership提供方法註冊方法

WebSecurity.CreateUserAndAccount(registerModel.UserName, registerModel.Password, 
    new { FirstName = registerModel.FirstName, LastName = registerModel.LastName, CompanyName = registerModel.CompanyName}); 

附加字段是不是被添加的對象類型的值方法的參數。對此的描述是「包含附加用戶屬性的字典」

所以這起作用。

我的問題是我已經安裝了JetBrains ReSharper的詳情8和屬性名,我得到「冗餘明確的屬性名稱」的警告。 要刪除的警告它,我改變我的代碼如下:

WebSecurity.CreateUserAndAccount(registerModel.UserName, registerModel.Password, 
    new { registerModel.FirstName, registerModel.LastName, registerModel.CompanyName}); 

我的問題是 1)此匿名對象的參數,我現在刪除的屬性名稱,所以我沒有得到ReSharper的警告了,它如何知道屬性名稱將用於匹配db屬性類,因爲它們是按值傳遞的?

2)具有屬性名稱的最佳實踐是或不是。讓他們不進去是不是很可讀,在代碼示例中,他們被指定,所以我會想他們在更好的可讀性,而不是刪除它

回答

10

我的問題是1)爲這個匿名對象參數,我現在刪除屬性名稱,所以我不再收到Resharper警告,它如何知道屬性名稱是什麼,因爲它們是按值傳遞的?

從表達式中推斷(由編譯器)的名稱。這僅適用於使用字段或屬性(例如不是文字或方法)的情況。這是C#語言規範的第7.6.10節。

2)什麼是最好的做法有屬性名稱或不。讓他們沒有不是很可讀的代碼樣本中,他們被指定,所以我會想像一下他們是更好的,而不是刪除它

如果這對你和你的團隊更具有可讀性總是包括名稱,然後繼續前進吧。對於其他人,它可能會感覺有點多餘。只需調整您的R#設置以適應您的本地慣例。

你的說法,「代碼樣本中,他們被指定」是似是而非的,但 - 有一些例子他們指定的地方,有些地方他們沒有。我懷疑你甚至會在特定的示例提供程序中找到混合(例如,在MSDN中)。

2

當你創建一個匿名類型的實例設置你的propertyNames對象 - 當你做,你可以離開了屬性的名稱,如果是一樣要從中分配值的屬性。這就是爲什麼ReSharper說這些名字是多餘的。

明確指出屬性名稱時,你不必是個人喜好;一旦你熟悉上述慣例,我認爲它不會損害可讀性。

0
  • 它是如何知道什麼屬性名稱將使用匹配的DB屬性類,因爲它們是由值

通過在nutshel anonimous類型上創建編譯時間。因此,編譯器使用傳遞的表達式解析屬性名稱,並在結果中聲明具有聲明只讀屬性的一致類。你可以檢查你的IL以便看到程序集包含這個類型並且屬性被設置爲明確的。

  • 什麼是具有屬性名稱或不

這取決於每個人的最佳實踐。我會建議爲您的團隊選擇一種方法,並在每臺DEV機器上使用相同的Resharper設置。