C# 将字典参数类型强制转换为对象
我有一本包装得严严实实的字典。 对于exmaple:C# 将字典参数类型强制转换为对象,c#,.net,C#,.net,我有一本包装得严严实实的字典。 对于exmaple: var dic = new Dictionary<string, object>() { { "a", "test1" }, { "b", "test2" }, }; object obj = dic; var d
var dic = new Dictionary<string, object>() {
{ "a", "test1" },
{ "b", "test2" },
};
object obj = dic;
var dic=newdictionary(){
{“a”,“test1”},
{“b”,“test2”},
};
对象obj=dic;
在实际代码中,我有一个接受objectobj的方法,所以我不知道实际类型。
现在我需要将该对象转换为字典
我写的解决方案,但我不喜欢,也许有人能给我更好的情况的愿景
var dic = new Dictionary<string, object>() {
{ "a", "test1" },
{ "b", "test2" },
};
object obj = dic;
var source = obj as IDictionary;
var dictionary = new Dictionary<object, object>();
foreach (var key in source.Keys)
{
dictionary[key] = source[key];
}
var dic=newdictionary(){
{“a”,“test1”},
{“b”,“test2”},
};
对象obj=dic;
var source=作为IDictionary的obj;
var dictionary=newdictionary();
foreach(source.Keys中的var键)
{
字典[键]=源[键];
}
您可以像这样使用ToDictionary
功能:
var dic = new Dictionary<string, object>() {
{ "a", "test1" },
{ "b", "test2" },
};
var dictionary = dic.ToDictionary(e => (object) e.Key, e.Value);
var dic=newdictionary(){
{“a”,“test1”},
{“b”,“test2”},
};
var dictionary=dic.ToDictionary(e=>(object)e.Key,e.Value);
请记住,就性能而言,它与您的解决方案几乎相同,只是在外观上更加优雅。您可以像这样使用
ToDictionary
功能:
var dic = new Dictionary<string, object>() {
{ "a", "test1" },
{ "b", "test2" },
};
var dictionary = dic.ToDictionary(e => (object) e.Key, e.Value);
var dic=newdictionary(){
{“a”,“test1”},
{“b”,“test2”},
};
var dictionary=dic.ToDictionary(e=>(object)e.Key,e.Value);
请记住,就性能而言,它与您的解决方案几乎相同,只是在外观上更优雅。为什么要将
对象
用作项目或变量类型?字符串是对象,字典
是对象。你想解决的实际问题是什么?你所描述的是假设的solution@PanagiotisKanavos在实际代码中,我有一个接受objectobj的方法。所以我真的不知道我得到了什么,可以是字典、矩阵或其他东西。但至少我可以检查对象是否是DictionaryPost真正的代码。您不需要强制转换来检查对象
是否实际上是字典,您需要例如是
还是GetType()
。为什么不让你的方法通用呢?或者使用重载,这样就不需要检查类型了?或者两者都有?您可以在同一个类中同时使用myMethod(int[]p1)
和myMethod(Dictionary p1)
重载问题是如何将打包为对象的字典强制转换为另一个字典类型。我举了一个正确的例子,你也不需要通过obj
。只需迭代dic
并将键、值添加到字典
。或者使用LINQ的ToDictionary,例如var dictionary=dic.ToDictionary(it=>(object)it.Key,it=>(object)it.Value)代码>。字典是一个IEnumerable
,这意味着您可以直接在字典上使用foreach
或LINQ
,为什么要将对象
用作项或变量类型?字符串是对象,字典
是对象。你想解决的实际问题是什么?你所描述的是假设的solution@PanagiotisKanavos在实际代码中,我有一个接受objectobj的方法。所以我真的不知道我得到了什么,可以是字典、矩阵或其他东西。但至少我可以检查对象是否是DictionaryPost真正的代码。您不需要强制转换来检查对象
是否实际上是字典,您需要例如是
还是GetType()
。为什么不让你的方法通用呢?或者使用重载,这样就不需要检查类型了?或者两者都有?您可以在同一个类中同时使用myMethod(int[]p1)
和myMethod(Dictionary p1)
重载问题是如何将打包为对象的字典强制转换为另一个字典类型。我举了一个正确的例子,你也不需要通过obj
。只需迭代dic
并将键、值添加到字典
。或者使用LINQ的ToDictionary,例如var dictionary=dic.ToDictionary(it=>(object)it.Key,it=>(object)it.Value)代码>。字典是一个IEnumerable
,这意味着你可以直接在它上面使用foreach
或LINQ
,正如我提到的我的字典打包到object-object obj=dic;我无法调用obj.todictionary,但您的源代码已经是IDictionary。你想实现什么?在实际代码中,我有一个方法,它接受objectobj。所以我真的不知道我得到了什么,可以是字典、矩阵或其他东西。但至少我可以检查对象是否是字典,这样就不会太简单了。您需要使用as运算符并检查空结果。然后对源代码使用上面的方法进行强制转换,应该是e=>e.Value
;我无法调用obj.todictionary,但您的源代码已经是IDictionary。你想实现什么?在实际代码中,我有一个方法,它接受objectobj。所以我真的不知道我得到了什么,可以是字典、矩阵或其他东西。但至少我可以检查对象是否是字典,这样就不会太简单了。您需要使用as运算符并检查空结果。然后对源代码使用上面的方法进行强制转换。应该是e=>e.Value
。