小编Roy*_*lal的帖子

在运行时修改类属性

我不确定我是否有可能看到:
在运行时更改属性的参数.
我的情况非常相似,但我试图在运行时更改类的属性:

[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)

c# reflection attributes .net-3.5 linq-to-sql

8
推荐指数
1
解决办法
8638
查看次数

标签 统计

.net-3.5 ×1

attributes ×1

c# ×1

linq-to-sql ×1

reflection ×1