重构常量字符串
本文关键字:字符串 常量 重构 | 更新日期: 2023-09-27 18:08:13
我有一个类Item
,它包含一个字段
public const string Root = "/homepage";
不幸的是,这个字符串不是const!
当我尝试重新定义
时public string Root = DoSomething("/homepage");
或属性
public string Root
{
get {
return DoSomething("/homepage");
}
}
我被两种不同类型的错误所困扰
A field initializer cannot reference the non-static field, method, or property 'Item.Root'
和这个,我认为这可能是一个更大的问题
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
如果没有认真的重构练习,我真的不知道如何解决这个问题。任何建议吗?
看起来你的代码一直在静态上下文中使用这个const
,即从静态方法或静态属性。这意味着替换属性也必须是static
:
public static string Root = DoSomething("/homepage");
当然,这意味着DoSomething(string)
也必须是静态的。
属性参数必须是属性参数类型
的常量表达式、typeof表达式或数组创建表达式。
不幸的是,你被困在这里:这个错误无法修复,因为属性参数必须是常量。您需要参考特定属性的文档,以查看是否有方法添加"间接级别",并使该属性的用户在运行时执行额外的请求,以允许您提供计算值。
这是因为您正在使用Root作为静态属性。项。Root意味着你从类"Item"访问Root,而不是实例类型"Item"的对象。
如果你需要从类本身访问它,那么把Root设置为静态。
然而,如果你有一个Item的实例并且也访问Root,那么使用你的对象-
myItemObject.Root
你还想要"DoSomething()"执行每次你调用根在以下?因为如果你把Root设置为静态那么你只会得到DoSomething第一次运行时的情况。如果你想让静态属性一直运行,就需要带getter的静态属性
public string Root = DoSomething("/homepage");