检查变量是否存在

时间:2013-12-13 17:49:39

标签: c# variables try-catch

我正在使用Visual Studio 2010在C#中构建一个程序。并且想知道是否有办法检查变量是否存在。

基本上,我的main.cs正在调用其他几个文件(file1.csfile2.csfile3.cs等)。每个文件都非常相似,但有些文件缺少一些变量。

例如,var v1file1.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

我知道上面的代码可能根本不起作用,但这就是想法。

有没有办法检查file3.cs中是否存在v1?也许是这样的。

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
    //....
}

现在程序甚至不会编译,我必须在file3.cs中创建v1并将其设置为null。这是临时解决方案,因为在该程序的其他部分/功能上,它要求v1不在file3.cs中(并且我不能改变它,因为它是以前的开发设置而我不知道代码足以改变它)

这是一个相当大的解决方案,所以很抱歉我无法真正发布实际代码。感谢所有人,我真的很感激。

2 个答案:

答案 0 :(得分:3)

如果您确实需要这样做,可以使用reflection。请注意,反射虽然很慢。每次尝试获取属性值时,您都可以使用try / catch。

在每个类模块(file1.cs,file2.cs等)中,您所谓的“变量”应该是propertiesmethods定义(或不​​是)

答案 1 :(得分:2)

根据评论,您可以在以下列表中添加项目:

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

这可以做到,因为那些&#34;文件的类型&#34;继承自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);
    }
}