2010-04-23 34 views
45

LINQPad là tuyệt vời, và đặc biệt hữu ích là phương pháp mở rộng Dump() mà ám đối tượng và cấu trúc của hầu như bất kỳ loại, vô danh hay không, để bàn điều khiển.Làm cách nào để sử dụng phương pháp mở rộng LINQPad Dump() trong Visual Studio?

Ban đầu, khi tôi chuyển sang Visual Studio 2010, tôi đã cố gắng thực hiện phương thức Dump của riêng mình bằng cách sử dụng đại biểu để lấy giá trị hiển thị cho các loại ẩn danh, v.v ... Mặc dù khá thú vị và mang tính giáo dục đầu tiên, tôi cần một triển khai thực hiện vững chắc. Đã kiểm tra mã LINQPad trong .NET Reflector Tôi thậm chí còn yên tâm hơn rằng tôi sẽ không thực hiện quyền thực hiện.

Có thư viện miễn phí nào mà tôi có thể đưa vào để cung cấp chức năng Dump không?

+6

câu hỏi này không nên được đóng lại bởi vì nó không gạ gẫm cuộc tranh luận, tranh cãi , bỏ phiếu hoặc thảo luận mở rộng –

+0

Tôi thấy phương thức kết xuất trong linqpad từ đây: --- https://www.linqpad.net, --- http://i.imgur.com/7j2WdZw.png và tôi nghĩ rằng đó là một phương pháp thực sự đặc biệt được sử dụng trong linqpad, vì vậy tôi không nghĩ rằng có cách dễ dàng để làm điều đó trong C# thực. như decription nó có thể tự động chuyển img thành img, calendar to calendar, phải có rất nhiều kiểu quyết định đối tượng trong mã thực sau –

+0

và tôi nhìn vào ObjectDumper, nó sử dụng phương thức Write ở cuối sử dụng lớp TextWriter , vì vậy tôi nghĩ những gì nó làm chỉ đơn giản là viết tất cả các đối tượng vào chuỗi có thể không làm những gì bạn muốn. –

Trả lời

34

Nhìn đây (đường dẫn của bạn có thể thay đổi):

C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Samples \ 1033 \ CSharpSamples.zip \ LinqSamples \ ObjectDumper

+0

+1 Lớp học rất tiện dụng. Tôi không bao giờ biết về điều đó. Tôi sẽ sao chép nó vào thư viện công cụ gỡ lỗi của tôi. Cảm ơn –

+0

Tôi biên soạn nó và thêm vào như là một tham chiếu đến dự án của tôi nhưng tôi nhận được một lỗi cố gắng xây dựng - ObjectDumper không tồn tại trong ngữ cảnh hiện tại. Làm thế nào bạn sẽ gọi nó? Viết một phương thức mở rộng hoặc chỉ là một phương thức tĩnh. Xin lỗi, tôi mới sử dụng C#. – gav

47

tôi đã viết một phần mở rộng phương pháp để đối tượng sử dụng serializer Json.Net với các tùy chọn định dạng khá. JSON đủ dễ đọc khi được định dạng như vậy. Bạn bỏ lỡ thông tin loại, nhưng tôi không biết rằng bạn cần điều đó, đặc biệt là xem xét việc này dễ dàng như thế nào. Tôi đã thất bại rồi. Tôi sử dụng Json.Net và không phải MS 'bởi vì nó có khả năng xử lý các tham chiếu vòng tròn trong đồ thị phức tạp, nơi MS' không thể, hoặc không tại thời điểm tôi nghĩ về nó.

using Newtonsoft.Json; 
    public static class Dumper{ 
     public static string ToPrettyString(this object value) 
     { 
      return JsonConvert.SerializeObject(value, Formatting.Indented); 
     } 
    } 
+0

điều này có vẻ tuyệt vời. Cảm ơn. Tôi sẽ thử rằng – kobi7

+0

Câu trả lời hay. Tôi chưa bao giờ nghĩ đến việc sử dụng json ... – Paul

+1

Cảm ơn vì điều này! Tôi đã định dán phiên bản VB của nó nhưng nó trông giống như rác trong các bình luận. – Colin

8

diceguyd30 's answer có nguồn gốc từ a discussion (especially Pat Kujawa's & anunay's comments) và mô tả làm thế nào để gọi thực hiện LINQPad bãi từ cả C# và VB.NET:

public static string DumpToHtmlString<T>(this T objectToSerialize) 
{ 
    string strHTML = ""; 
    try 
    { 
     var writer = LINQPad.Util.CreateXhtmlWriter(true); 
     writer.Write(objectToSerialize); 
     strHTML = writer.ToString(); 
    } 
    catch (Exception exc) 
    { 
     Debug.Assert(false, "Investigate why ?" + exc); 
    } 
    return strHTML; 
} 
+0

Tuyệt vời, cảm ơn. Làm việc hoàn hảo. –

+0

Nhà văn là IDisposable. – Tormod

Các vấn đề liên quan