我是C#的新手,曾经在CMS中写过一点,但是我的背景主要是与JavaScript相关的。也就是说,我正在OpenText Capture Center的“脚本”客户端中工作。执行以下代码时,出现错误“当前上下文中不存在名称'srfOnly'”
如果将变量声明移至函数内,则会出现相同的错误;如果将它们移至全局变量,则会出现相同的错误,但行号不同。
如何在整个代码中访问变量srfOnly和otherDocs?
//Parameters:
//DataPool data
//ITrace trace
// Checking if condition is fulfilled.
if (checkDocuments(data))
{
// Getting batch field named 'cc_SkipValidation'.
// Setting new value.
DOKuStar.Data.Xml.Bool skipValidationField = data.RootNode.Fields["cc_SkipValidation"] as DOKuStar.Data.Xml.Bool;
bool srfOnly = false;
bool otherDocs = false;
if(otherDocs == true)
{
skipValidationField.SetValue(false);
}
if(srfOnly == true && otherDocs == false)
{
skipValidationField.SetValue(true);
skipValidationField.State = DataState.Ok;
}
}
// !!! Closing bracket is neccessary !!!
}
// ------------------ Functions
public bool checkDocuments(DataPool dataPool)
{
foreach (Document doc in dataPool.RootNode.Documents)
{
if (doc.Name == "ServiceRequestForm")
{
srfOnly = true;
}
else if (doc.Name != "ServiceRequestForm")
{
otherDocs = true;
}
}
trace.WriteInfo("Trace info for Validation of srfOnly = " + srfOnly);
trace.WriteInfo("Trace info for Validation of otherDocs = " + otherDocs);
// !!! No closing bracket needed !!!
答案 0 :(得分:2)
变量在范围上受到它们在代码中的位置的限制。如果在if {}块内声明变量,则该变量仅存在于该块内。如果在类内部而不是在类方法中声明变量,则该类中的每个方法都可以访问该变量。如果希望某个项目中的每个类都可以访问该变量,则通常可以在公共静态类中对其进行声明。
例如...
<mat-card class="example-card">
<mat-card-header>
<div mat-card-avatar class="example-header-image"></div>
<mat-card-title>{{room.name}}</mat-card-title>
<mat-card-subtitle>${{room.price}} por noche</mat-card-subtitle>
</mat-card-header>
<my-image-gallery mat-card-image></my-image-gallery>
<mat-card-content>
<p>
{{room.details}}
</p>
</mat-card-content>
<mat-card-actions>
<button mat-raised-button>Book</button>
<button mat-button>Share</button>
</mat-card-actions>
</mat-card>
答案 1 :(得分:0)
只能在当前块(以及该块中的块)内访问变量。如果要访问checkDocuments方法中的srfOnly
变量,可以将其作为参数传递:
public bool checkDocuments(DataPool dataPool, bool srfOnly)
如果您希望可以从类中的任何位置访问该变量,则可以将其声明为类的属性或实例变量,如下所示:
private bool _srfOnly;