2010-08-09 23 views
10

Ricevo questo errore,Valore predefinito per il costruttore di attributi?

errore CS0182: Un argomento attributo deve essere un'espressione costante, typeof espressione o la creazione di matrice espressione di un tipo di parametro di attributo

Quando tento di scrivere qualcosa Ti piace questa

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

neppure non mostrano un numero di riga, ma scompare quando prendo che =null bit.

In realtà, l'errore si verifica solo sia quando fornisco un valore predefinito e basano su di esso (vale a dire, ho ometterlo) in questo modo

[Url("/index")] 

Sono curioso di sapere perché questo? In che modo "null" non è un'espressione costante?

+1

Ho ricevuto un feedback da Microsoft e ho aggiornato la mia risposta di conseguenza. – kbrimington

+1

@kbrimington: Grazie per l'aggiornamento! Sembra che dovremo aspettare prima che la correzione venga rilasciata ... vabbè, non è affatto un problema :) – mpen

+0

nome oggetto = null dara anche questo errore. – ghord

risposta

9

Sto chiamando "bug".

Spero non ti dispiaccia, ho segnalato il bug a Microsoft.

UPDATE:

ho ricevuto il seguente feedback da Microsoft oggi, corsivo.

Grazie per aver segnalato questo problema hai riscontrato con Visual Studio!

Abbiamo risolto i parametri della stringa opzionale sugli attributi nel nostro codice. vedrete questa correzione nella versione di Visual Studio dopo VS 2010.

Alex Turner

Program Manager

Visual Basic e C# compilatore

+0

Non importa affatto. Ottengo un 404 quando seguo quel collegamento però. Mi ha chiesto di accedere, e poi ha detto che la pagina non è stata trovata. – mpen

+0

@ Mark: Strano. L'ho appena provato e ha funzionato bene.Forse è una cosa delle autorizzazioni. Vi terrò aggiornati. Ho ricevuto una lettera di conferma automatica che indicava che era stata indirizzata al team giusto. Vedremo cosa succede. – kbrimington

+0

Ha menzionato le autorizzazioni: "Non è possibile trovare il contenuto richiesto o non si dispone dell'autorizzazione per visualizzarlo." Così potrebbe essere. – mpen

1

Attributi fornisci già argomenti predefiniti. È sufficiente creare proprietà pubbliche sull'attributo e quelle possono essere assegnate nel processo di creazione di attributi. Funziona già, è già ben compreso ed è coerente con il funzionamento degli attributi del framework. Quindi ... perché non utilizzare questo meccanismo invece di provare a aggiungere in modo ridondante parametri predefiniti al costruttore?

+1

Questa non era la domanda :) Ma il motivo "perché" è perché il C# 4 ha aggiunto parametri con nome. Con gli attributi, sembrerebbe che ora abbiamo * due * modi di definire i parametri nominati, tranne che non lo facciamo, perché questo solleva un errore; Stavo cercando di mantenere l'app coerente attenendosi a un metodo. Tuttavia, non sto dicendo che è una buona idea aggiungere argomenti di default, mi sto solo chiedendo * perché * non possiamo. – mpen

+0

Potrebbe essere un bug, ma non penso che sia fondamentale perché esiste già un modo migliore per farlo. Mi dispiace che C# non sia completamente ortogonale. – siride

+1

Per me è sicuramente un bug. È possibile compilare il codice con la definizione dell'attributo, ma qualsiasi codice che lo utilizza non può essere compilato. – user276648

Problemi correlati