对于我正在研究的ASP.NET MVC项目,我需要检查LINQ-To-SQL类中的位变量是否为真。到目前为止,在检查每个变量是真还是假之后,然后我将该字段的值推入List并返回如下:
public List<String> GetVarList() {
List<String> list = new List<String>();
if (fields.SearchBar) {
list.Add("SearchBar");
}
if (fields.SomeField) {
list.Add("SomeField");
}
return list;
}
对我而言,这似乎并不是最快或最简单的方法。
我想知道它可以以某种方式通过使用for或foreach循环遍历它们来动态地从字符串数组中检查变量的值。例如:
public List<String> GetVarList() {
String[] array = {"SearchBar", "SomeField"};
List<String> list = new List<String>();
foreach (String field in array) {
// Check whether or not the value is true dynamically through the array
}
return list;
}
感谢您的任何建议!
答案 0 :(得分:0)
您可以使用反射:
public List<String> GetVarList() {
String[] array = {"SearchBar", "SomeField"};
List<String> list = new List<String>();
var type=fields.GetType();
foreach (String field in array) {
var prop=type.GetProperty(field);
if ((bool)prop.GetValue(fields,null))
list.Add(field);
}
return list;
}
从你的问题不清楚SearchBar,SomeFields等是字段还是属性。如果它们是字段,请相应地更改代码(使用GetField()而不是GetProperty())
答案 1 :(得分:0)
当然,你可以使用反射来做这样的事情:
private bool ValueWasSet(string propertyName)
{
var property = fields.GetType().GetProperty(propertyName);
return (bool)property.GetValue(fields, null);
}
public List<string> GetVarList()
{
return new [] {"SearchBar", "SomeField"}
.Where(ValueWasSet)
.ToList();
}
这是一个非常直接的解决方案,假设您需要查看很多项目。
CAVEAT:这并不比你的代码快。你的代码要快得多......但是如果你想更加动态地执行它,你必须付出轻微的性价比。