2013-02-26 31 views
5

我剛剛得到以下異常,這似乎表明Guid不是一個對象。不能用於返回類型 爲什麼Guid不是c#中的對象?

型 '的System.Guid' 表達 'System.Object的'

怎麼Guid不是一個對象?

編譯器如何解決這個問題?必須有一些東西能夠讓我在運行時檢測到類型不是對象,如果是這樣的話,會是什麼情況?

====================編輯附加信息====================

​​

其中SomeExpression可以是Guid的常量值,對於所有問題。

+2

這似乎是相關的:http://stackoverflow.com/questions/2200209/expression-of-type-system-int32-cannot-be-used-for-return-type-system-object – 2013-02-26 08:18:42

+0

是的,但我不想投不一定,我怎麼知道是否有什麼東西能起作用?表達式工作正常,直到我處理原生/值類型的東西。 – Alwyn 2013-02-26 08:20:26

+3

您的問題缺少示例代碼(最好是CSXXXX錯誤代碼與MSDN鏈接,因此您可以評論什麼不明確)。 – 2013-02-26 08:20:36

回答

17
​​

這裏的問題是您正在使用表達式結構錯誤。即使box操作在C#中隱含,它仍然存在。表達式樹中隱含的是而不是。下面應該修復它:

Expression.Lambda<Func<object>>(
    Expression.Convert(SomeExpression, typeof(object)) 

你也可以查看SomeExpression.Type.IsValueType來決定是否要添加此額外的顯式轉換。

+0

Marc,隱式轉換一直正常,直到我處理Guid。它適用於我的字典,列表,自定義複雜類 - 你的名字。我不認爲Guid是唯一的例外,但它絕對是其中之一。 – Alwyn 2013-02-26 08:25:50

+5

@Alwyn和你提到的所有內容都是*引用類型*。正如我所說:盒子的操作必須是明確的。 'Guid'是一個*值類型*(一個'struct') – 2013-02-26 08:26:50

+0

@MarcGravell需要解釋很多事情,所以你需要對值類型進行裝箱。所有參考類型都可以免費獲得。 – Alwyn 2013-02-26 08:29:13