为NSDictionaryOfVariableBindings等键创建一个具有变量名称的对象字典

时间:2014-03-25 18:57:58

标签: c# ios xamarin

在带有Objective-C的iOS上,有一个非常方便的宏,用一个自动称为NSDictionaryOfVariableBindings的变量名和变量的键值对填充字典:

 NSDictionaryOfVariableBindings(v1, v2, v3);

相当于

 [NSDictionary dictionaryWithObjectsAndKeys:v1, @“v1”, v2, @“v2”, v3, @“v3”, nil];;

有没有人知道C#中的类似技术?理想情况下,我想创建一个像

这样的扩展方法
 Dictionary.FromVariableBindings(v1, v2, v3);

这相当于

 new Dictionary<string, object>()
 {
       {"v1", v1},
       {"v2", v2},
       {"v3", v3}
 }

这对Xamarin / MonoTouch非常有用。

1 个答案:

答案 0 :(得分:0)

我认为这会让你想要你想要的。它是使用linq的一个班轮。

var objects = new object[] { 1, "Hello", 1.0M }; //Just create some system objects to show that it works.
var result = objects.ToDictionary(o => o.GetType().Name);

如果你希望它看起来像IOS一样的签名那么你可以做这样的事情。

public Dictionary<string, object> FromVariableBindings(params object[] objects)
{
    return objects.ToDictionary(o => o.GetType().Name);
}

在阅读时他再次质疑你可能正在寻找变量名而不是对象类型。如果是这种情况则变得更加困难。您可以调用下面的代码来获取变量名称,但它不会在foreach循环中正常工作。

var temp = 1;

var result = GetMemberName(() => temp); //returns "temp"





public static string GetMemberName<T>(Expression<Func<T>> memberExpression)
    {
        MemberExpression expressionBody = (MemberExpression)memberExpression.Body;
        return expressionBody.Member.Name;
    }
相关问题