問題

這導致編譯時異常:

 public sealed class ValidatesAttribute<T> : Attribute
{

}

[Validates<string>]
public static class StringValidation
{

}
 

我意識到C#不支援通用屬性.但是,經過大量谷歌搜尋,我似乎找不到原因.

有誰知道為什麼泛型型別不能源自Attribute?有任何理論嗎?

  最佳答案

嗯,我無法回答為什麼它不可用,但我可以確認它不是CLI問題. CLI規範沒有提到它(據我所知),如果您直接使用IL,您可以建立一個通用屬性.禁止它的C#3規範部分 – 第10.1.4節“Class base規範”沒有給出任何理由.

註釋的 ECMA C#2 規範也沒有提供任何有用的資訊,儘管它確實提供了一個不允許的例子。

我註釋的C#3規範的副本應該明天到達...我會看看它是否提供了更多資訊.無論如何,它肯定是語言決定而不是執行時決定.

編輯:來自Eric Lippert(解釋)的答案:除了避免語言和編譯器的複雜性以外,沒有特殊的原因,用例沒有增加多少價值.

  相同標籤的其他問題

c#generics.net-attributes