在带有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非常有用。
答案 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;
}