trạng thái hiện tạiCó thể truy cập thuộc tính con "DebuggerDisplay" của thuộc tính không?
Có hai lớp:
[DebuggerDisplay(@"One = {One}, two = {Two}")]
public class A
{
public int One { get; set; }
public B Two { get; set; }
}
[DebuggerDisplay(@"Three = {Three}")]
public class B
{
public int Three { get; set; }
}
Sử dụng chúng:
var a = new A {One = 5, Two = new B {Three = 10}};
Bên trong debugger, giá trị đầu công cụ được hiển thị ở a
là
One = 5, two = {D ebuggerDisplayTest.B}
Goal
Những gì tôi muốn là một cái gì đó giống như
Một = 5, hai = 'Ba = 10'
Tôi biết điều này có thể đạt được bằng cách ghi đè phương thức ToString()
của lớp B
. Điều này chỉ cảm thấy không đúng, vì tôi đang viết mã trong ứng dụng của tôi để gỡ lỗi chỉ.
Tôi cũng biết rằng việc sử dụng một chuỗi tương tự như
[DebuggerDisplay(@"One = {One}, two = 'Three = {Two.Three}'")]
sẽ làm việc, quá. Điều này cũng không cảm thấy phù hợp với tôi, vì nó đòi hỏi lớp học A
có kiến thức về lớp học B
.
Tôi muốn có thêm một cách để "tiêm" giá trị DebuggerDisplay
loại B
vào thể hiện loại đó trong lớp A
.
Câu hỏi
Có bằng cách nào đó có thể truy cập vào DebuggerDisplay
thuộc tính của một thành viên bên trong DebuggerDisplay
thuộc tính của một "có-một" lớp ghép?
Cập nhật
Có lẽ, yêu cầu của tôi là không thể thực hiện theo this SO answer. Có lẽ một giải pháp tốt sẽ là ghi đè ToString
trong lớp B
và thực hiện một số if..else
và sử dụng Debugger.IsAttached
property để hoạt động khác nhau chỉ bên trong trình gỡ lỗi.
Cái gì như:
[DebuggerDisplay(@"Three = {Three}")]
public class B
{
public int Three { get; set; }
public override string ToString()
{
if (Debugger.IsAttached)
{
return string.Format(@"Three = {0}", Three);
}
else
{
return base.ToString();
}
}
}
Liên quan: http://stackoverflow.com/questions/8677795/chaining-debuggerdisplay-on-complex-types –