相关疑难解决方法(0)

如何在Visual Studio中使用LINQPad Dump()扩展方法?

LINQPad非常棒,特别有用的是Dump()扩展方法,它可以将几乎任何类型的对象和结构(匿名或非匿名)呈现给控制台.

最初,当我转移到Visual Studio 2010时,我尝试Dump使用委托制作我自己的方法来获取为匿名类型等呈现的值.尽管它变得非常复杂,虽然它起初很有趣和教育,但我需要一个扎实的实施.检查了.NET Reflector中的LINQPad代码后,我更加确信我不会得到正确的实现.

我可以提供免费的库以提供Dump功能吗?

c# linqpad

49
推荐指数
4
解决办法
3万
查看次数

如何将IEnumerable <T>转换为字符串,递归?

我想要一个函数,我可以调用它来替代.ToString(),它将显示集合的内容.

我试过这个:

public static string dump(Object o) {
    if (o == null) return "null";
    return o.ToString();
}

public static string dump<K, V>(KeyValuePair<K, V> kv) {
    return dump(kv.Key) + "=>" + dump(kv.Value);
}

public static string dump<T>(IEnumerable<T> list) {
    StringBuilder result = new StringBuilder("{");
    foreach(T t in list) {
        result.Append(dump(t));
        result.Append(", ");
    }
    result.Append("}");
    return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)

但第二次超载永远不会被调用.例如:

List<string> list = new List<string>();
list.Add("polo");
Dictionary<int, List<string>> dict;
dict.Add(1, list);
Console.WriteLine(dump(dict));
Run Code Online (Sandbox Code Playgroud)

我期待这个输出:

{1=>{"polo", }, }
Run Code Online (Sandbox Code Playgroud)

实际发生的是:dict被正确解释为a IEnumerable<KeyValuePair<int, List<string>>>,因此调用第3个重载.

第3次重载调用KeyValuePair上的转储>.这应该(?)调用第二个重载,但它没有 - 它调用第一个重载. …

c# generics

7
推荐指数
2
解决办法
569
查看次数

HttpWebRequest对象的诊断转储

有没有什么好的方法(除了繁琐地查询每个属性)在C#中为HttpWebRequest构建诊断转储字符串?对于简单的对象,人们可以逃避使用new JObject(theObject),但这对HttpWebRequest不起作用(toString当然,对于HttpWebRequest,它在任何C#对象上都是无用的).

对于C#对象的任何子集,是否有任何通用的方法(除了使用new JObject我已经提到的)之外?

更新: 我发现使用JsonConvert.SerializeObject(Hans的链接中的一个建议)可以很好地转储HttpWebRequest(尽管它没有获取请求流).我有点使System.Net.Tracing的东西工作(尽管文档,像往常一样用于.NET的东西,很糟糕).

c# httpwebrequest

3
推荐指数
2
解决办法
7648
查看次数

标签 统计

c# ×3

generics ×1

httpwebrequest ×1

linqpad ×1