C# 重构常量字符串
我有一些类项,其中包含一个字段C# 重构常量字符串,c#,refactoring,C#,Refactoring,我有一些类项,其中包含一个字段 public const string Root = "/homepage"; 不幸的是,这个字符串不是常量 当我试着像你说的那样重新定义 public string Root = DoSomething("/homepage"); 或财产 public string Root { get { return DoSomething("/homepage"); } } 我被两种不同类型的错误搞砸了 A field initialize
public const string Root = "/homepage";
不幸的是,这个字符串不是常量
当我试着像你说的那样重新定义
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
如果没有认真的重构练习,我真的不知道如何解决这个问题。有什么建议吗?看起来您的代码一直在静态上下文中使用此常量,即从静态方法或静态属性中使用此常量。这意味着替换属性也必须是静态的: 当然,这意味着DoSomethingstring也必须是静态的 属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式
不幸的是,您被困在这里:这个错误无法修复,因为属性参数必须是常量。您需要参考特定属性的文档,以查看是否有方法添加间接级别,并让属性的用户在运行时执行附加请求,以便您提供计算值。看起来您的代码一直在静态上下文中使用此常量,即,来自静态方法或静态属性。这意味着替换属性也必须是静态的: 当然,这意味着DoSomethingstring也必须是静态的 属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式
不幸的是,您被困在这里:这个错误无法修复,因为属性参数必须是常量。您需要参考特定属性的文档,以查看是否有方法添加间接级别,并让属性的用户在运行时执行附加请求,以便您提供计算值。这是因为您将Root用作静态属性。Root表示您是从类项而不是实例类型项的对象访问Root 如果需要从类本身访问它,那么将Root设置为静态 但是,如果您有一个Item实例,并且也在访问Root,则使用您的对象-
myItemObject.Root
另外,是否希望每次在下面的代码中调用root时都执行DoSomething?因为如果将Root设置为静态,那么只能在第一次运行DoSomething。如果需要始终运行静态属性,则需要使用getter
public string Root = DoSomething("/homepage");
这是因为您将Root用作静态属性。Root表示您是从类项而不是实例类型项的对象访问Root 如果需要从类本身访问它,那么将Root设置为静态 但是,如果您有一个Item实例,并且也在访问Root,则使用您的对象-
myItemObject.Root
另外,是否希望每次在下面的代码中调用root时都执行DoSomething?因为如果将Root设置为静态,那么只能在第一次运行DoSomething。如果需要始终运行静态属性,则需要使用getter
public string Root = DoSomething("/homepage");
@伊凡斯托夫:你是对的,我错过了第二个错误。谢谢谢谢,至少现在我知道我有麻烦了。@inspite你自己的属性有问题吗,还是你不能更改?@@dasblinkenlight我想这是我不能更改的。@IvanStoev你是对的,我错过了第二个错误。谢谢谢谢,至少现在我知道我有麻烦了。@inspite你自己的属性有问题吗,还是你不能更改?@@dasblinkenlight我想这是我不能更改的属性。