C# 初始化ViewDataDictionary

C# 初始化ViewDataDictionary,c#,.net,asp.net-mvc-4,C#,.net,Asp.net Mvc 4,我需要构建一个函数,该函数接受一个参数并将其传递给System.Web.Mvc.ViewDataDictionary构造函数。这是我的代码: // this WORKS, but need to pass as parameter var dic1 = new System.Web.Mvc.ViewDataDictionary { { "key", "value" } }; // this DOES NOT WORK Test({ "key", "value" }); // I try do

我需要构建一个函数,该函数接受一个参数并将其传递给
System.Web.Mvc.ViewDataDictionary
构造函数。这是我的代码:

// this WORKS, but need to pass as parameter
var dic1 = new System.Web.Mvc.ViewDataDictionary { { "key", "value" } };

// this DOES NOT WORK
Test({ "key", "value" }); // I try do not have 'new Something({"", ""})'

function Test(object myParam) {
    var dic2 = new System.Web.Mvc.ViewDataDictionary { myParam };
    //...
}
是否有一种方法可以像我一样传递参数,而不需要传递整个
new System.Web.Mvc.ViewDataDictionary{{{“key”,“value”}
作为
Test
函数的参数

PS.这是一些解释问题的测试代码

// WORKS
var dic1 = new System.Web.Mvc.ViewDataDictionary { { "key", "value" } };

// DOES NOT WORK

// A CASE
string[] myArr = { "key", "value" }; // OK
var dic2 = new System.Web.Mvc.ViewDataDictionary { myArr }; // NOK

// B CASE    
KeyValuePair<string, object> myPair = {"key", "value"}; // NOK
var dic3 = new System.Web.Mvc.ViewDataDictionary { myPair }; // OK

不幸的是,它不可能实现您想要的,因为花括号只能用于。只有当这些花括号连接到
new
关键字时,解析器才会以特殊的方式处理它们。它解析它们并生成一组
Add
调用

如果您只想传递键和值,可以这样做:

Test("key", "value"); 

void Test(string key, object value) {
    var dic2 = new ViewDataDictionary { { key, value  } };
    //...
}
ViewDataDictionary
包含一个接受另一个
ViewDataDictionary
的构造函数:

Test(new ViewDataDictionary { { key, value  } }); 

void Test(ViewDataDictionary dictionary) {
     var dic2 = new ViewDataDictionary(dictionary);
     //...
}
如果需要将一个
ViewDataDictionary
中的一些值添加到另一个现有
ViewDataDictionary
中,可以使用以下代码:

Test(new ViewDataDictionary { { key, value  } }); 

void Test(ViewDataDictionary dictionary) {
     var dic2 = new ViewDataDictionary();
     // ... initialize dic2
     foreach (var pair in dictionary)
     {
            dic2.Add(pair);
     }
}
如果需要传递数组(由
KeyValuePair
元素组成)来初始化字典,可以通过以下方式完成:

Test(new[] { new KeyValuePair<string, object>("key1", "value1"),
             new KeyValuePair<string, object>("key2", "value2") }); 

void Test(KeyValuePair<string, object>[] pairs) {
     var dic2 = new ViewDataDictionary();
     foreach (var pair in pairs)
     {
            dic2.Add(pair);
     }
     //...
}
Test(new[]{newkeyValuePair(“key1”,“value1”),
新的KeyValuePair(“key2”、“value2”)};
无效测试(KeyValuePair[]对){
var dic2=新的ViewDataDictionary();
foreach(成对变量对)
{
dic2.添加(对);
}
//...
}

为什么不先创建字典,然后根据需要添加条目?顺便说一下,您也可以考虑将相关数据添加到模型中,而不是通过VIEWDATA传递它。通常,我有一个单一的键值,因此为此创建一个字典…我只想传递
{“key”,“value”}
如果possible@SergiiZhevzhyk,谢谢,请看我的PS;)@Serge你能告诉我我提供的答案是解决了问题还是有其他问题吗?我用额外的例子扩展了它。干杯也许我错过了什么,但你为什么说“添加项目”?我没有使用任何
.Add()
调用…我已更改了描述。很抱歉让人误解。所以,如果我想添加2对,我需要4个参数。。。等等?有很多方法可以做到这一点。如果总是只需要将元素添加到字典中,则可以有4个参数。您还可以传递一个包含
KeyValuePair
实例的数组。。。它是如何通过
keyvaluepairmypair={“key”,“value”}的方式强制转换的(这不编译)?
Test(new[] { new KeyValuePair<string, object>("key1", "value1"),
             new KeyValuePair<string, object>("key2", "value2") }); 

void Test(KeyValuePair<string, object>[] pairs) {
     var dic2 = new ViewDataDictionary();
     foreach (var pair in pairs)
     {
            dic2.Add(pair);
     }
     //...
}