小编Dre*_*gen的帖子

带有构建器模式的"dynamic"关键字隐藏了扩展方法

我最近遇到了dynamic关键字的奇怪行为,而我正在测试一些东西.这不是我迫切需要解决的问题,因为我只是在尝试,但我想知道是否有人可以透露正在发生的事情

我有一个构建器,它返回一个HttpWebRequest对象和一个扩展方法HttpWebRequest.

我的一个构建器方法需要string参数.当我将构建器方法传递给字符串时,整个过程都有效,但我传递了一个dynamic变量,该变量是一个不再有效的字符串.

看起来好像返回类型的构建器方法HttpWebRequestBuilder现在返回dynamic.

下面的代码很简单,可以重现它,也可以在这里找到

注意

要使其工作,请注释掉该行.SetBody(dynamicString)并取消注释该行.SetBody(json).

public class Program
{
    public static void Main()
    {
        dynamic dynamicString = "{ \"test\" : \"value\" }";
        string json = "{ \"test\" : \"value\" }";

        string test = new HttpWebRequestBuilder()
            .SetRequestType()
            //.SetBody(json) //uncomment this and it works
            .SetBody(dynamicString) //uncomment this and it breaks
            .Build()
            .ExtensionMethod();

        Console.WriteLine(test);
    }

}

public class HttpWebRequestBuilder
{
    private readonly …
Run Code Online (Sandbox Code Playgroud)

.net c# extension-methods dynamic

6
推荐指数
1
解决办法
119
查看次数

标签 统计

.net ×1

c# ×1

dynamic ×1

extension-methods ×1