我有一个结构上与此类似的函数:
void Foo(dynamic arg1, dynamic arg2, out dynamic result) {
result = arg1 + arg2;
}
我使用的是动态,因为这个函数通常应该处理我向它抛出的任何类型。
但如果我尝试这样调用它:
string Bar = null;
...
Foo("a", "b", out this.Bar);
我收到一条错误消息;我似乎无法将预定义字符串 Bar
传递给函数(无法从“out string”转换为“outdynamic”
)。
但是,当我从类型声明和函数调用中删除“out”关键字时,一切都工作得很好(我提到这一点是为了证明其他一切都工作得很好)。
我不明白为什么 out 修饰符会改变整个情况,并且 Dynamic 突然无法转换为字符串,就像我可以通过隐式分配它 as stated in the docs 来做到这一点.
我很乐意感谢任何帮助,似乎没有很多人将字符串传递给期望使用 out
修饰符的 dynamic
函数...
最佳答案
I get an error message; I seemingly can't pass my pre-defined string Bar to the function (Cannot convert from 'out string' to 'out dynamic').
这个错误的原因是无法推断。然而,为了解决这个问题,您可以使用满足此要求的泛型。
void Foo<T>(dynamic arg1, dynamic arg2, out T result)
一切都按您的示例预期进行...
Foo("a", "b", out this.Bar); // "ab"
Foo(1, 123, out int test); // test == 124
关于C# 无法从 'out string' 转换为 'out dynamic',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60175577/