gpt4 book ai didi

c# - 有没有一种简单的方法可以让dynamic/ExpandoObject返回字符串而不是对象?

转载 作者:行者123 更新时间:2023-12-02 10:44:47 24 4
gpt4 key购买 nike

我想使用一个动态对象,我通常使用 Dictionary<string, string> 。我想去从

dict.Add("key", "value");
string val = dict["key"];

 dyna.key = "value";
string val = dyna.key

典型ExpandoObject将返回object对于 dyna.key ,有什么简单的方法可以让它在访问每个值时返回字符串而不进行强制转换?

<小时/>

编辑:抱歉,我没有充分研究我的问题 -

这并不是说我调用的代码不能将它用作字符串,它有这个:

public static implicit operator SomethingSomething(string name)

这就是它崩溃的原因

编辑2:好吧,我是个白痴,只有在从头开始重新创建它之后,我才阅读完整的错误消息:没有名为“GetMyClass”的适用方法,但似乎有一个使用该名称的扩展方法。扩展方法无法动态分派(dispatch)。考虑转换动态参数或在不使用扩展方法语法的情况下调用扩展方法。

最佳答案

Typical ExpandoObject will return an object for dyna.key

呃,不完全是,它会返回你告诉它返回的任何内容:

dynamic dyna = new ExpandoObject();
dyna.key = "value";
string val = dyna.key;

当然,您不能再依赖编译时检查,并且以下代码显然会在运行时崩溃:

dynamic dyna = new ExpandoObject();
dyna.key = "value";
int val = dyna.key;

因此请确保您使用的类型与用于存储值的类型相同。

<小时/>

更新:

class Program
{
static void Main()
{
dynamic dyna = new ExpandoObject();
dyna.key = "value";
Test(dyna.key);
}

public static void Test(string message)
{
Console.WriteLine(message);
}
}
<小时/>

更新2:

我还是不明白问题出在哪里:

class Program
{
static void Main()
{
dynamic d = new ExpandoObject();
d.key = "value";
Program p = d.key;
Console.WriteLine(p.Name);
}

public string Name { get; set; }

public static implicit operator Program(string name)
{
return new Program
{
Name = name
};
}
}

关于c# - 有没有一种简单的方法可以让dynamic/ExpandoObject返回字符串而不是对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161842/

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