2010-08-09 319 views
10

我得到這個錯誤,屬性構造函數的默認值?

錯誤CS0182:屬性參數必須是常量表達式的typeof屬性參數類型

的表達或數組創建表達式當我嘗試寫一些東西這樣

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] 
public class UrlAttribute : Attribute 
{ 
    public UrlAttribute(string pattern, string name=null) 
    { 
     // ... 

,它甚至沒有顯示行數,但是當我拿那=null位消失。

其實,錯誤只發生當我提供一個默認值依靠它(即我忽略它)像這樣

[Url("/index")] 

我很好奇,想知道爲什麼嗎? 「null」如何不是一個常量表達式?

+1

我收到了來自Microsoft的反饋,並相應地更新了我的回覆。 – kbrimington 2010-10-08 18:24:13

+1

@kbrimington:感謝您的更新!聽起來就像我們必須等待解決方案發布之前...哦,這不是關鍵:) – mpen 2010-10-09 02:36:16

+0

對象名稱= null也給出了這個錯誤。 – ghord 2012-01-23 13:43:24

回答

9

我打電話給'bug'。

我希望你不介意,我向微軟報告了這個錯誤。

UPDATE:

我今天收到來自微軟的下列反饋,加上強調。

感謝您報告使用Visual Studio遇到的這個問題 !

我們修復了我們代碼中屬性的可選字符串 參數。 VS後,您會看到此修復程序在 的Visual Studio 2010年版

亞歷克斯·特納

項目經理

Visual Basic和C#編譯器

+0

不要介意。儘管我遵循該鏈接,但我獲得了404。它要求我登錄,然後說沒有找到該頁面。 – mpen 2010-08-10 01:02:46

+0

@Mark:奇怪。我只是試了一下,它工作得很好。也許這是一個權限的事情。我會及時向大家發佈。我確實收到了一封自動確認信,表明它正在發送給適當的團隊。我們將看到會發生什麼。 – kbrimington 2010-08-10 01:11:17

+0

它確實提到了權限 - 「您請求的內容無法找到,或者您沒有權限查看它。」所以可能就是這樣。 – mpen 2010-08-10 02:06:51

1

屬性已經提供了默認的參數。您只需在屬性上創建公共屬性,然後可以在屬性實例化過程中分配這些屬性。它已經有效,它已經很好理解,並且與框架屬性的工作方式一致。所以......爲什麼不使用這種機制而不是試圖向構造函數冗餘添加默認參數呢?

+1

這不是問題:)但「爲什麼」的原因是因爲C#4添加了命名參數。有了Attributes,看起來我們現在有兩種定義命名參數的方法,除了我們沒有,因爲這個方法產生了一個錯誤;我試圖通過堅持一種方法來保持應用程序的一致性。儘管如此,我並不是說添加默認參數是一個好主意,我只是想知道爲什麼我們不能。 – mpen 2010-08-10 01:01:33

+0

這可能是一個錯誤,但我不認爲這很重要,因爲現在已經有更好的方法去做了。對不起,C#不完全正交。 – siride 2010-08-10 06:23:22

+1

對我來說這絕對是一個錯誤。您可以使用屬性的定義來編譯代碼,但是無論使用它的代碼都無法編譯。 – user276648 2011-09-15 05:58:00

相關問題