1

我有以下方法(我在方法的注释中举例说明了我需要什么):

public static Dictionary<int, int> Foo(bool os, bool rad, bool aci, bool outr, string distrito = null)
{
    if (os == false && rad == false && aci == false && outr == false)
    {
        return new Dictionary<int, int>();
    }

    var parameters = MethodBase.GetCurrentMethod().GetParameters();
    foreach (ParameterInfo parameter in parameters)
    {
        // I would love if parameter.Value existed, because:
        // if (parameter.Value==true) {
        // x++
        // if (x == 1) string s = "true" + parameter.Name;
        // if (x > 1) s += "Additional true" + parameter.Name;
        // }
        // s += "End";
    }
    return null;
}

我必须知道参数的一个或多个bool是否为真。由于它们是四个,想象一下if我必须做的组合来检查是否只有一个是真的,或者如果不止一个,这是真的。

那么,如何在不使用参数变量本身的情况下循环传入 Method 参数的当前值呢?

4

2 回答 2

0

您可以尝试一些LINQ扩展Where,我认为组合Select可能是一个解决方案,string.Join上面有一个方法:

// get all parameters
var parameters = MethodBase.GetCurrentMethod().GetParameters();

// for each true parameter we add this prefix
var truePrefix = "true";

// we put this string between true parameters, if more than one are present
var separator = "Additional";

// Join IEnumerable of strings with a given separator
var total = string.Join(separator, parameters
  // filter parameters to check only boolean ones, and only true ones
  .Where(p => p.ParameterType == typeof(bool) && (bool)p.Value)
  // select a name with prefix
  .Select(p => truePrefix + p.Name)))
于 2016-12-24T08:33:49.490 回答
0

如果您只想知道有多少是真的,您可以将它们变成整数并添加它们的值:

var values = new[] {os, rad, aci, outr};
var sum = values.Select(v => Convert.ToInt32(v)).Sum();

如果您需要参数的名称,则可以创建一个匿名对象并读取其属性:

public static Dictionary<int, int> Foo(bool os, bool rad, bool aci, bool outr, string distrito = null)
{
    var obj = new { os, rad, aci, outr};
    foreach (PropertyInfo pInfo in obj.GetType().GetProperties())
    {
        var value = (bool)pInfo.GetValue(obj);
        if (value)
        {
            //Do whatever you want here.                    
            Console.WriteLine("{0}: {1}", pInfo.Name, value);
        }
    }
}
于 2016-12-23T19:16:37.333 回答