No estoy seguro de si es posible que he visto:
Change Attribute's parameter at runtime.
Mi caso es muy similar, pero estoy tratando de cambiar el atributo de una clase en tiempo de ejecución:Modificación característicos de las clases en tiempo de ejecución
[Category("Change me")]
public class Classic
{
public string Name { get; set; }
}
Una de las respuestas fue:
Dim prop As PropertyDescriptor = TypeDescriptor
.GetProperties(GetType(UserInfo))("Age")
Dim att As CategoryAttribute = DirectCast(
prop.Attributes(GetType(CategoryAttribute)),
CategoryAttribute)
Dim cat As FieldInfo = att.GetType.GetField(
"categoryValue",
BindingFlags.NonPublic Or BindingFlags.Instance)
cat.SetValue(att, "A better description")
cambió a formato más legible, gracias a Marc Gravell:
TypeDescriptor.AddAttributes(table, new Category{ Name = "Changed" });
Todo es buena cuando se utiliza TypeDescriptor pero cuando se utiliza:
var attrs = (Category[])typeof(Classic).GetCustomAttributes(
typeof(Category),
true);
attrs[0].Name
Nombre tiene el texto "Cambiar".
¿Hay alguna manera de cambiar este atributo en el tiempo de ejecución?
Editar:
necesito esto para Linq2Sql en el diseñador del código generado tiene el esquema de base de datos. Quiero utilizar el esquema predeterminado del usuario sin utilizar asignación XML o cambiar el código generado (la tabla todavía está en etapa de desarrollo y cambia con frecuencia).
El código del diseñador es:
[global::System.Data.Linq.Mapping.TableAttribute(Name="DbSchema.MyTable")]
public partial class MyTable
Quiero el atributo de ser:
[TableAttribute(Name="MyTable")]
Ahora he excavado en el código de Marco y creo que utiliza linq2sql:
TableAttribute[] attrs = (TableAttribute[])typeof(MyTable)
.GetCustomAttributes(typeof(TableAttribute), true);
Cuando uso TypeDescriptor para cambiar el atributo, el valor no se cambia en GetCustomAttributes.
¿Por qué quieres hacer esto? Los atributos están destinados a proporcionar metadatos, no mucho más. ¿Por qué no tomar el enfoque de tener una "lista de reglas" que inicialmente está poblada por los atributos y cambia desde allí? – vcsjones
¿Qué estás tratando de lograr? ¿Localizar texto en categoría? –
@vcsjones lo crea o no, hay ocasiones en las que necesita agregar, cambiar o eliminar atributos en tiempo de ejecución. Tuve que hacerlo para agregar un convertidor a los enlaces de WPF para que se serializaran en lugar de evaluar. – Will