2009-02-09 41 views
4

我不確定何時應該使用匿名類型而不是局部變量在C#中。匿名類型VS局部變量,何時應該使用?

我:

string fullMessage // This is the full message including sender and recipient names 

string sender = GetMessagePart(fullMessage, "from"); 
string recipient = GetMessagePart(fullMessage, "to"); 

//do some stuff and deliver the message 

我應該使用:

var msg = new { 
sender = GetMessagePart(fullMessage, "from") 
recipient = GetMessagePart(fullMessage, "to") 
}; 

呢?

+0

[應該如何在C#中使用匿名類型](http://stackoverflow.com/questions/48668/how-should-anonymous-types-be-used-in-c) – nawfal 2014-07-15 15:28:42

回答

8

你是指靜態類型變量嗎?需要注意的是匿名類型靜態類型...(刪除,由於問題編輯)

有2個問題,C#匿名類型:

  • 您無法通過API方法揭露
  • 他們
  • 你不能變異他們(成員只讀)

如果你只需要知道一個方法中的數據,它是隻讀的,那麼一個匿名類型是得心應手(和這個c實際上在很多情況下)。

如果您需要對數據進行變異或將其傳遞給調用者,則可以使用定製類或簡單變量(等)。

在給出的情況下,我看不到使用匿名類型的原因;如果你只是想要的值,使用單獨的變量的方法。如果「消息」具有定義的含義,則聲明一個Message類並填充它。

1

在這種情況下使用局部變量(我認爲這是你的意思)。

匿名類型應該用在需要標準名稱類型的地方,但只能用於方法內部的實現目的。它消除了創建新類型定義的繁瑣工作。

這裏你不需要類型,所以不要使用匿名類型。

2

將發件人和收件人分組在一起在這種方法之外有意義嗎?如果是這樣,請考慮爲他們創建一個班級。如果沒有,我會通常使用單獨的局部變量,但我懷疑這主要是通過習慣。

我懷疑我們在這裏得到的是一對概念上相關的局部變量。這種關係可能不夠強大,不足以獲得完整的類型,但在方法中有意義。在某些方面,使用匿名類型是使配對明顯的一種非常簡單的方式。另一方面,如果你的方法足夠長,以至於它確實需要額外的清晰度,也許你應該分解它。

請注意,使用匿名類型會使一些重構技術變得更難,因爲類型僅適用於該方法(沒有一點瑕疵)。

我意識到這是一個虛無answer answer的答案,但它確實讓我覺得總體思想中有一些優點 - 這有點像在函數式語言中使用元組。