0

我正在尝试更改public static readonly stringinside的值System.Web.Mvc

具体来说,我正在尝试实现这篇文章中标记的答案所暗示的内容,并且我正在使用以下代码:

var htmlHelper = typeof(HtmlHelper);
var field = htmlHelper.GetField("ValidationInputCssClassName", BindingFlags.Public | BindingFlags.Static);
if (field != null)
{
    // existing value is "input-validation-error"
    field.SetValue(null, "has-error");
}

但是,在我设置该值后,GetValue表明没有任何变化,这在生成的网页上得到了证实。

我能想到的唯一解释是 .NET 的 JIT 编译器会在我更改只读字段之前缓存它们。

或者有人有更好的建议吗?

更新: 如果我在调用field.GetValue(null)后立即调用,SetValue我会得到值“has-error”,正如我所期望的那样,这表明该static readonly可以更改。但是,当网页加载时,我发现存在未更改的字段。

更新2: 我相信上面的代码正在修改public static readonly string字段。我之前的困惑是由于(1)检查GetValue错误的事件(或者可能不是所有线程),以及(2)网页仍然使用旧值,因为正如我刚刚意识到的那样,是由于微软的 jquery .validate.unobtrusive.js 脚本具有硬编码的 CSS 类的名称。这就是为什么我一直在页面上看到旧值,而不是因为反射没有更新字段值。对浪费的任何时间表示歉意。

4

1 回答 1

0

初始化后(内联或在构造函数中)无法更改只读值。

于 2013-11-06T14:49:21.743 回答