我有一些类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
如果没有认真的重构练习,我真的不确定如何解决这个问题。有什么建议吗?
答案 0 :(得分:4)
看起来你的代码在静态上下文中使用了这个<table id="table-projects" class="table table-hover">
<thead class="text-center">
<tr>
<th width="10%"><center>Project Name</center></th>
</tr>
</thead>
<tbody>
@foreach($projects as $project)
<tr>
<td>{{$project->title}}</td>
<tr>
@endforeach
</tbody>
</table>
,即来自静态方法或静态属性。这意味着替换属性也必须是const
:
static
当然,这意味着public static string Root = DoSomething("/homepage");
也必须是静态的。
属性参数必须是属性参数类型
的常量表达式,typeof表达式或数组创建表达式
不幸的是,你被困在这里:这个错误无法修复,因为属性参数必须是常量。您需要引用特定属性的文档,以查看是否有方法添加&#34;间接级别&#34;,并使属性的用户在运行时执行额外请求以允许您提供计算值。
答案 1 :(得分:0)
这是因为您使用Root作为静态属性。 Item.Root表示您正在从类&#34; Item&#34;中访问Root。而不是实例类型的对象&#34;项目&#34;。
如果你需要从类本身访问它,那么使Root成为静态的。
但是,如果您有一个Item实例并且还访问Root,那么请使用您的对象 -
myItemObject.Root
你也想要&#34; DoSomething()&#34;每次你在下面调用root时执行?因为如果你将Root设为静态,那么你只会在DoSomething第一次运行时获得。如果您需要一直运行
,则需要带有getter的静态属性public string Root = DoSomething("/homepage");