Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为NSDictionaryOfVariableBindings等键创建具有变量名的对象字典_C#_Ios_Xamarin - Fatal编程技术网

C# 为NSDictionaryOfVariableBindings等键创建具有变量名的对象字典

C# 为NSDictionaryOfVariableBindings等键创建具有变量名的对象字典,c#,ios,xamarin,C#,Ios,Xamarin,在使用Objective-C的iOS上,有一个非常方便的宏,它用变量名和变量的键值对自动填充字典,称为NSDictionaryOfVariableBindings: NSDictionaryOfVariableBindings(v1, v2, v3); 这相当于 [NSDictionary dictionaryWithObjectsAndKeys:v1, @“v1”, v2, @“v2”, v3, @“v3”, nil];; new Dictionary<string, obje

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

 NSDictionaryOfVariableBindings(v1, v2, v3);
这相当于

 [NSDictionary dictionaryWithObjectsAndKeys:v1, @“v1”, v2, @“v2”, v3, @“v3”, nil];;
 new Dictionary<string, object>()
 {
       {"v1", v1},
       {"v2", v2},
       {"v3", v3}
 }
有人知道C#中的类似技术吗?理想情况下,我希望创建一个扩展方法,如

 Dictionary.FromVariableBindings(v1, v2, v3);
这相当于

 [NSDictionary dictionaryWithObjectsAndKeys:v1, @“v1”, v2, @“v2”, v3, @“v3”, nil];;
 new Dictionary<string, object>()
 {
       {"v1", v1},
       {"v2", v2},
       {"v3", v3}
 }
newdictionary()
{
{“v1”,v1},
{“v2”,v2},
{“v3”,v3}
}

这对Xamarin/MonoTouch的使用非常有帮助。

我想这会给你想要的。这是一个使用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);
}
variablebindings(params对象[]对象)的公共字典
{
返回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;
    }
var-temp=1;
var result=GetMemberName(()=>temp)//返回“temp”
公共静态字符串GetMemberName(表达式memberExpression)
{
MemberExpression expressionBody=(MemberExpression)MemberExpression.Body;
返回expressionBody.Member.Name;
}

您的键值对输入是什么?对不起,措辞不好,我认为LINQ扩展方法
ToDictionary
对您来说很有用,但如果您想创建新的字典实例,这是最好的。我想/需要知道的是,键值对是批量添加还是一次添加一个。它们不是对,只是变量。源代码中变量的名称应以键结束,变量本身作为值。我甚至不知道这在C#中是否可行。到时候你会感到惊喜的。使用反射获取名称和值。这几乎可以在任何可以访问相关字段/属性的地方完成。我尝试使用局部变量而不是字段/属性来完成。我想我的例子不是很清楚。是的,这个GetMemberName尝试更接近我要做的,但是我仍然不太清楚如何使用它和一个方便的语法。