C # Переменная Scoping - PullRequest
       16

C # Переменная Scoping

0 голосов
/ 04 октября 2018

Я новичок в 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 голосов
/ 04 октября 2018

Переменные ограничены областью, где они существуют в вашем коде.Если вы объявляете переменную в блоке if {}, переменная существует только внутри этого блока.Если вы объявляете переменную внутри класса, но не внутри метода класса, эта переменная доступна для каждого метода в классе.Если вы хотите, чтобы переменная была доступна каждому классу в проекте, вы обычно объявляете ее в общедоступном статическом классе.

Например ...

public static class GlobalClass
{
    public static string myGlobal="";    
}  

class myClass
{
    string myClassVariable = "";
    private void method()
    {
        //myGlobal is accessible using this
        GlobalClass.myGlobal ="some value";
        //myClassVariable is accessible here
        myClassVariable = "somevalue";
        if(condition)
        {
            //myClassVariable is also accessible here
            myClassVariable = "somevalue";
            string ifBlockVariable = "";
        }
        //ifBlockVariable is not accessible here
    }
}
0 голосов
/ 04 октября 2018

Переменная доступна только внутри текущего блока (и блоков внутри этого блока).Если вы хотите получить доступ к переменной srfOnly в методе checkDocuments, вы можете передать ее в качестве параметра:

public bool checkDocuments(DataPool dataPool, bool srfOnly)

Если вы хотите, чтобы переменная была доступна из любого места в классеВы можете объявить его как свойство класса или переменную экземпляра следующим образом:

private bool _srfOnly;

...