C#变量作用域

时间:2018-10-04 20:41:02

标签: c# scope opentext

我是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 !!!

2 个答案:

答案 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;