Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 将字典参数类型强制转换为对象_C#_.net - Fatal编程技术网

C# 将字典参数类型强制转换为对象

C# 将字典参数类型强制转换为对象,c#,.net,C#,.net,我有一本包装得严严实实的字典。 对于exmaple: var dic = new Dictionary<string, object>() { { "a", "test1" }, { "b", "test2" }, }; object obj = dic; var d

我有一本包装得严严实实的字典。 对于exmaple:

            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