C#列出/检查对象变量?

时间:2010-09-07 19:59:25

标签: c# linq asp.net-mvc-2

对于我正在研究的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;
}

感谢您的任何建议!

2 个答案:

答案 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:这并不比你的代码快。你的代码要快得多......但是如果你想更加动态地执行它,你必须付出轻微的性价比。