gpt4 book ai didi

c# - 如何将对象转换为仅在运行时已知的类型

转载 作者:行者123 更新时间:2023-11-30 23:10:15 25 4
gpt4 key购买 nike

考虑以下情况。我有一个 Dictionary<string,string> dictionary , 和一个 string key .我在编译时不知道这两种类型,但我在运行时知道它们。所以在编译时,它们只是对象。我想调用 dictionary.ContainsKey(key)。但是,因为 key 是一个“转换为对象”的字符串,这会产生 RuntimeBinderException。我想了解如何解决这个问题。

以下是一些证明该问题的测试:

    [TestMethod]
public void ThisTestFails()
{
dynamic dictionary = getDict();
var key = getKey();

bool result = dictionary.ContainsKey(key);
Assert.IsTrue(result);
}

[TestMethod]
public void ThisTestWorks()
{
dynamic dictionary = getDict();
var key = (string)getKey();

bool result = dictionary.ContainsKey(key);
Assert.IsTrue(result);
}

private object getDict() => new Dictionary<string, string>() { { "abc", "def" } };
private object getKey() => "abc";

ThisTestFails失败并显示 RunTimeBinderException , 而 ThisTestWorks通过。所以,发生的事情是,虽然 key两个测试中的变量都包含一个字符串,它在 ThisTestFails 中的明显类型是一个对象,不能在dictionary.ContainsKey中使用.

本质上,我需要解决这个问题的是一种“转换”key 的方法。在运行时变量为字符串。 (string)key ThisTestWorks 中的解决方案对我没有用,因为在一般情况下我在编译时不知道字典键的类型。可以做些什么来解决这个问题?

最佳答案

您好,我想您正在寻找这样的东西

dynamic dictionary = getDict();
dynamic key = getKey();

bool result = (bool)dictionary.ContainsKey(key);
Assert.IsTrue(result);

但这可能是另一个问题,因为您正在尝试寻找一个装在“对象”类型中的字符串(此类型是从您的方法返回的,例如 GetKey()),因此在 containKey 方法中将对对象进行比较type 表示按引用而不是字符串的值。

关于c# - 如何将对象转换为仅在运行时已知的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45481969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com