2015-06-22 102 views
1

我相信這個答案很簡單,但我試圖編寫一個if語句(C#5.0)來確定匿名類型是否爲空。以下是我的代碼的簡化版本:如何確定匿名類型的對象是否爲空?

public void DoSomething(object attributes) 
{ 
    // This is the line I need?? 
    if (atrributes != new {}) { 

    } 
} 

根據需要動態創建屬性變量,有時它是空的。

那麼如何確定匿名類型是否爲空?

+1

檢查? – Loocid

+1

由於匿名類型不提供==運算符重載,也許你的意思是'object.Equals(htmlAttributes,new {})'。 –

+0

我寧願用合適的構建器編寫一個類,並根據您的需要構建對象。如果你沒有設置任何屬性,只需創建一個所謂的[空對象](https://sourcemaking.com/design_patterns/null_object)或返回'null'。 – ckruczek

回答

4

匿名類型不爲==提供運算符重載,儘管在這種情況下它並不重要,因爲其中一個參數是類型化對象。但是,C#編譯器確實提供了Equals,GetHashCode和ToString實現。

使用靜態object.Equals,方法將做相應的null檢查,然後調用虛擬的Equals第一個參數方法:

object.Equals(attributes, new { }); 

你也可以緩存靜態實例如果你關心的開銷的每個比較的分配。

2

如果空你的意思是沒有屬性,你可以使用反射:如果`null`

var o1 = new {}; 
o1.GetType().GetProperties().Count(); //==0 

var o2 = new {test=1}; 
o2.GetType().GetProperties().Count(); //==1