I am not sure if it is possible I have seen:
Change Attribute\'s parameter at runtime.
My case is very similar but I am trying to change the attribute of a class in
If you use reflection, then not quite like this - reflection attributes can't be substituted - only the component-model view is impacted by TypeDescriptor
. However, you can subclass CategoryAttribute
to your purposes. Especially useful for i18n.
using System.ComponentModel;
using System;
[MyCategory("Fred")]
class Foo { }
static class Program
{
static void Main()
{
var ca = (CategoryAttribute)Attribute.GetCustomAttribute(typeof(Foo), typeof(CategoryAttribute));
Console.WriteLine(ca.Category);
// ^^^ writes "I was Fred, but not I'm EVIL Fred"
}
}
class MyCategoryAttribute : CategoryAttribute
{
public MyCategoryAttribute(string category) : base(category) { }
protected override string GetLocalizedString(string value)
{
return "I was " + value + ", but not I'm EVIL " + value;
}
}