我正在使用Visual Studio 2010在C#中构建一个程序。并且想知道是否有办法检查变量是否存在。
基本上,我的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
我知道上面的代码可能根本不起作用,但这就是想法。
有没有办法检查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中(并且我不能改变它,因为它是以前的开发设置而我不知道代码足以改变它)
这是一个相当大的解决方案,所以很抱歉我无法真正发布实际代码。感谢所有人,我真的很感激。
答案 0 :(得分:3)
如果您确实需要这样做,可以使用reflection
。请注意,反射虽然很慢。每次尝试获取属性值时,您都可以使用try / catch。
在每个类模块(file1.cs,file2.cs等)中,您所谓的“变量”应该是properties
或methods
定义(或不是)
答案 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);
}
}