6

私は、新しい c# 6 演算子 nameof を利用して、params 配列から暗黙的にキー/値の辞書を作成できると考えました。

例として、次のメソッド呼び出しを考えてみましょう。

string myName = "John", myAge = "33", myAddress = "Melbourne";
Test(myName, myAge, myAddress);

params 配列から要素の名前を暗示できる Test の実装があるかどうかはわかりません。

nameofリフレクションなしでjust を使用してこれを行う方法はありますか?

private static void Test(params string[] values)
{
    List<string> keyValueList = new List<string>();

    //for(int i = 0; i < values.Length; i++)
    foreach(var p in values)
    {
        //"Key" is always "p", obviously
        Console.WriteLine($"Key: {nameof(p)}, Value: {p}");
    }
}
4

1 に答える 1

4

いいえ、それはできません。使用されている変数名についての知識がありません。このような情報は、呼び出し先には渡されません。

次のように、必要なものを達成できます。

private static void Test(params string[][] values)
{
    ...
}

public static void Main(string[] args)
{
    string myName = "John", myAge = "33", myAddress = "Melbourne";
    Test(new string[] { nameof(myName), myName });
}

または辞書を使用して:

private static void Test(Dictionary<string, string> values)
{
    ...
}

public static void Main(string[] args)
{
    string myName = "John", myAge = "33", myAddress = "Melbourne";
    Test(new Dictionary<string, string> { { nameof(myName), myName }, { nameof(myAge), myAge} });
}

または使用dynamic

private static void Test(dynamic values)
{
    var dict = ((IDictionary<string, object>)values);
}

public static void Main(string[] args)
{
    dynamic values = new ExpandoObject();
    values.A = "a";
    Test(values);
}

別の可能性はExpression、メソッドに渡す を使用することです。そこで、式から変数名を抽出し、その値に対して式を実行できます。

于 2016-11-03T13:57:35.300 に答える