2010-08-09 21 views
10

que estoy recibiendo este error,Valor predeterminado para el constructor de atributos?

error CS0182: Un argumento atributo debe ser una expresión constante, typeof expresión o la creación de la matriz expresión de un tipo de parámetro atributo

Cuando trato de escribir algo como esto

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

no siquiera aparece un número de línea, pero desaparece cuando tomo que =null bits.

En realidad, el error sólo se produce tanto cuando proporciono un valor por defecto y dependen de ella (es decir, que omitirlo) al igual que

[Url("/index")] 

Tengo curiosidad por saber por qué esto? ¿Cómo es "nulo" no una expresión constante?

+1

Recibí comentarios de Microsoft y actualicé mi respuesta en consecuencia. – kbrimington

+1

@kbrimington: ¡Gracias por la actualización! Parece que tendremos que esperar antes de que se publique la solución ... bueno, no es crítico :) – mpen

+0

object name = null también proporciona este error. – ghord

Respuesta

9

llamo 'error'.

Espero que no te importe, informé del error a Microsoft.

ACTUALIZACIÓN:

que recibió la siguiente respuesta de Microsoft hoy en día, el subrayado es nuestro.

Gracias por informar de este problema ha encontrado con Visual Studio!

Hemos arreglado los parámetros de cadena opcionales en los atributos de nuestro código. Verá esta corrección en la versión de Visual Studio después de VS 2010.

Alex Turner

administrador de programas

Visual Basic y C# compilador

+0

No importa en absoluto. Obtengo un 404 cuando sigo ese enlace. Me pidió que inicie sesión y luego dijo que no se encontró la página. – mpen

+0

@Mark: Extraño. Lo probé y funcionó bien.Tal vez es una cuestión de permisos. Te mantendré informado. Recibí una carta de confirmación automática que indicaba que estaba siendo enrutada al equipo adecuado. Veremos que pasa. – kbrimington

+0

Sí mencionó permisos: "El contenido que solicitó no se puede encontrar o no tiene permiso para verlo". Así que eso podría ser. – mpen

1

Atributos ya proporciona argumentos habilitados por defecto. Simplemente crea propiedades públicas en el atributo y éstas se pueden asignar en el proceso de instanciación de atributos. Ya funciona, ya es bien entendido y es coherente con el funcionamiento de los atributos de framework. Entonces ... ¿por qué no usar ese mecanismo en lugar de intentar agregar de manera redundante parámetros por defecto al constructor?

+1

Esa no era la pregunta :) Pero la razón "por qué" es porque C# 4 agregó parámetros con nombre. Con Atributos, parece que ahora tenemos * dos * formas de definir parámetros con nombre, excepto que no lo hacemos, porque este provoca un error; Intentaba mantener la aplicación consistente al seguir con un método. Sin embargo, no digo que sea una buena idea agregar argumentos predeterminados, solo me pregunto * por qué * no podemos. – mpen

+0

Puede ser un error, pero no creo que sea crítico porque ya existe una mejor manera de hacerlo. Perdón por que C# no sea completamente ortogonal. – siride

+1

Para mí, eso definitivamente es un error. Puede compilar el código con la definición del atributo, pero cualquier código que lo use no puede compilarse. – user276648

Cuestiones relacionadas