我不确定我是否有可能看到:
在运行时更改属性的参数.
我的情况非常相似,但我试图在运行时更改类的属性:
[Category("Change me")]
public class Classic
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
其中一个答案是:
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")
Run Code Online (Sandbox Code Playgroud)
更改为更易阅读的格式,感谢Marc Gravell:
TypeDescriptor.AddAttributes(table, new Category{ Name = "Changed" });
Run Code Online (Sandbox Code Playgroud)
使用TypeDescriptor但使用时,一切都很好:
var attrs = (Category[])typeof(Classic).GetCustomAttributes(
typeof(Category),
true);
attrs[0].Name
Run Code Online (Sandbox Code Playgroud)
名称包含"更改我"文本.
有没有办法在运行时更改此属性?
编辑:
我在设计器中为Linq2Sql需要这个,生成的代码具有DB模式.我想使用用户的默认架构而不使用XML映射或更改生成的代码(表仍处于开发阶段并经常更改).
设计师代码是:
[global::System.Data.Linq.Mapping.TableAttribute(Name="DbSchema.MyTable")]
public partial class MyTable
Run Code Online (Sandbox Code Playgroud)
我希望该属性为:
[TableAttribute(Name="MyTable")]
Run Code Online (Sandbox Code Playgroud)
现在我已经挖掘了框架代码,我认为linq2sql使用:
TableAttribute[] attrs = …Run Code Online (Sandbox Code Playgroud)