我使用从a派生的类型DynamicObject作为某些字符串的构建器.最后我打电话ToString来获得最终结果.
在这一点上,我认为它会给我一个正常的字符串,但这个字符串有点奇怪.当我在其上使用字符串函数时,它的行为就像一个,但它的行为就像我实际上不知道什么,既不是字符串也不是动态.
这就是我ToString在构建器上实现的方式
public class Example : DynamicObject
{
public override bool TryConvert(ConvertBinder binder, out object result)
{
if (binder.ReturnType == typeof(string))
{
result = ToString();
return true;
}
result = null;
return false;
}
public override string ToString()
{
return base.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
当我像这样运行它
dynamic example = new Example();
Console.WriteLine(example.ToString().ToUpper());
Run Code Online (Sandbox Code Playgroud)
结果是正确的:( USERQUERY+EXAMPLE在LINQPad中执行时)
但是,如果我像这样打电话给第二行
Console.WriteLine(example.ToString().Extension());
Run Code Online (Sandbox Code Playgroud)
哪里
static class Extensions
{
public static string Extension(this string str)
{
return str.ToUpper();
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序崩溃了一个RuntimeBinderException …