![](/img/trans.png)
[英]c# compiler error when passing `this` to a delegate that accepts generic parameter
[英]C# Compiler error caused by passing default string parameter to attribute
為什么下面的代碼給我例外:
CSC錯誤CS0182:屬性參數必須是屬性參數類型的常量表達式,typeof表達式或數組創建表達式
在我的構建服務器上?
/// Customer.cs...
[Search(SearchAttribute.SearchDisplay.Regular)]
public Category Category
{
get; set;
}
public enum Category : byte
{
X = 0x01,
Y = 0x02,
...
}
/// SearchAttribute.cs...
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class SearchAttribute : Attribute
{
public SearchDisplay Display { get; private set; }
public enum SearchDisplay
{
None = (byte) 0x01,
Regular = (byte) 0x02
}
public SearchAttribute(SearchDisplay display, string columnName = null)
: base()
{
Display = display;
}
}
非常感謝。
令人憤怒的是,它在VS2012中可以正常運行。 我不確定服務器上運行的是哪個版本的編譯器-但我很確定它不是2012版本。
UPDATE
感謝下面的回答者,我已經弄清楚了:
我正在使用VS2012,但是構建服務器仍在使用VS2010構建過程。 在屬性中使用空值默認參數時,VS2010 / C#4編譯器中會出現一個錯誤 。 我可以通過以下三種方法解決:
public SearchAttribute(SearchDisplay display, string columnName)
我現在要和2一起去。 3是我以后需要考慮的問題。
我認為Customer.cs
文件位於單獨的程序集(C#項目)中,並且該程序集引用SearchAttribute.cs
所在的程序集(項目)。
為了使構造函數中的枚舉SearchDisplay
和可選參數columnName
能夠正常工作,至關重要的是, 兩個程序集必須以正確的順序重新編譯。 我懷疑構建服務器上的情況並非如此。 依賴程序集可能是通過引用SearchAttribute
所在程序集的舊版本進行編譯的。
UPDATE
查看右側所有鏈接的線程。 他們說這是Visual Studio 2012(C#5編譯器)已修復的錯誤。 僅當可選參數的默認值為null
時,它才會發生。 在我的第一個測試中,我做出了使用另一個字符串(可以識別)的愚蠢決定,但是對於另一個字符串卻沒有發生。 (將在下面刪除我的評論。)
當屬性的用法與屬性類本身在同一程序集中時,這有助於為null
文字提供顯式類型,例如:
public SearchAttribute(SearchDisplay display, string columnName = (string)null)
...
這樣,只要所有用法與上述構造函數都在同一程序集中,就可以正常工作。 但是,在您的情況下,它們位於不同的程序集中。
如果您願意使用空字符串代替,問題就解決了:
public SearchAttribute(SearchDisplay display, string columnName = "")
...
否則,建議您使用舊的C#-4-以前的樣式
[Search(SearchAttribute.SearchDisplay.Regular)]
public Category Category
...
[Search(SearchAttribute.SearchDisplay.Regular, ColumnName = "Changed!")]
public Category AnotherCategory
...
只要有一個名為ColumnName
的類成員(實例屬性或字段),此構造函數在構造函數中就不會使用columnName
參數。 該ColumnName
不得為只讀或僅獲取。
你不是說
[Search(SearchAttribute.SearchDisplay.Regular)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.