Проверьте, существует ли переменная

Я строю программу на C# с использованием Visual Studio 2010. И мне было интересно, есть ли способ проверить, существует ли переменная.

Так что в основном мой main.cs вызывает несколько других файлов (file1.cs, file2.cs, file3.cs, так далее). Каждый из этих файлов очень похож, но в некоторых отсутствуют некоторые переменные.

Например, var v1 существует в file1.cs а также file2.cs, но нет file3.cs

В моем main.csЭто что-то вроде этого.

string a = MyProgram.file1.v1;
string b = MyProgram.file2.v1;
string c = MyProgram.file3.v1; //will break here

Я знаю, что приведенный выше код, вероятно, не будет работать вообще, но это была идея.

Есть ли способ проверить, существует ли v1 в file3.cs? Может быть как то так

string c = VarExist(MyProgram.file3.v1) ? MyProgram.file3.v1 : "variable not exist";

Я пытался использовать try-catch, но код даже не скомпилируется с этим методом.

РЕДАКТИРОВАТЬ

Я знаю, что переменная не существует, но есть ли способ для самой программы проверить это?

В моем файле main.cs он просматривает эти файлы и применяет одну и ту же операцию. Я хочу, чтобы он мог делать что-то вроде этого:

foreach (file in files) //loop through file1.cs - file3.cs
{
    if (file.v1 exist)
        //do action1
    if (file.v2 exist)
        //do action2
    if (file.v3 exist)
        //do action3
    //....
}

Прямо сейчас программа даже не скомпилируется, мне нужно будет создать v1 в file3.cs и установить его в null. Это было временное решение, потому что для других частей / функций этой программы требуется, чтобы v1 НЕ находился в file3.cs (и нет, я не могу изменить это, потому что это то, что было настроено предыдущей разработкой, и я не знаю код достаточно хорошо, чтобы изменить его)

Это довольно большое решение, поэтому я извиняюсь, что не могу опубликовать реальный код. Спасибо всем за то время, что я действительно ценю это.

2 ответа

Решение

Согласно комментариям, вы можете добавить свои элементы в список, как это:

var files = new List<userRule>()
{
    MyProgram.file1,
    MyProgram.file2,
    MyProgram.file3
};

Это может быть сделано, потому что тип этих "файлов" наследуется от userRule.

Теперь вы можете перебирать с помощью:

foreach (file in files)
{
    //something
}

Для проверки сделайте это:

foreach (file in files)
{
    var property = file.GetType().GetProperty("v1");
    if (property == null)
    {
        // it doesn't have the property
    }
    else
    {
        // it has the property
        // read it:
        var v1 = property.GetValue(file, null);
        // write it:
        property.SetValue(file, v1, null);
    }
}

Если вам действительно нужно сделать это таким образом, вы можете использовать reflection, Имейте в виду, отражение медленное, хотя. После этого вы сможете использовать try/catch каждый раз, когда пытаетесь получить значение свойства.

То, что вы называете "переменными", должно быть properties или же methods определяется (или нет) в каждом из модулей вашего класса (file1.cs, file2.cs и т. д.)

Другие вопросы по тегам