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;
}

パラメータの1 つ以上の値boolが trueかどうかを知る必要があります。それらは 4 つなので、if1 つだけが真であるか、または複数の場合に真であるかを確認するために、I の組み合わせを想像してみてください。

では、パラメーター変数自体を使用せずに、受信した Method パラメーターの現在の値を循環させるにはどうすればよいでしょうか?

4

2 に答える 2

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 に答える