Я не уверен, возможно ли это, я видел:
Изменить параметр атрибута во время выполнения.
Мой случай очень похож, но я пытаюсь изменить атрибут класса во время выполнения:
[Category("Change me")]
public class Classic
{
public string Name { get; set; }
}
Один из ответов был:
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")
Изменен на более читаемый формат, благодаря Марку Гравеллу:
TypeDescriptor.AddAttributes(table, new Category{ Name = "Changed" });
Все хорошо при использовании TypeDescriptor, но при использовании:
var attrs = (Category[])typeof(Classic).GetCustomAttributes(
typeof(Category),
true);
attrs[0].Name
Имя имеет текст "Измени меня".
Есть ли способ изменить этот атрибут во время выполнения?
Edit:
Мне нужно это для Linq2Sql в конструкторе сгенерированный код имеет схему БД. Я хочу использовать схему пользователя по умолчанию без использования сопоставления XML или изменить сгенерированный код (таблица все еще находится в стадии разработки и часто изменяется).
Код конструктора:
[global::System.Data.Linq.Mapping.TableAttribute(Name="DbSchema.MyTable")]
public partial class MyTable
Я хочу, чтобы атрибут был:
[TableAttribute(Name="MyTable")]
Теперь я копался в коде фреймворка и думаю, что linq2sql использует:
TableAttribute[] attrs = (TableAttribute[])typeof(MyTable)
.GetCustomAttributes(typeof(TableAttribute), true);
Когда я использую TypeDescriptor для изменения атрибута, значение не изменяется в GetCustomAttributes.