From 8654421b5dc394d41575e8adac23a7dcea1d7c5c Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Sun, 21 May 2023 14:41:14 -0400 Subject: [PATCH] Add DebuggerDisplay for SearchValues --- .../src/System/SearchValues/SearchValues.T.cs | 22 ++++++++++++++++++- .../SearchValues/SearchValuesDebugView.cs | 3 +++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.T.cs b/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.T.cs index 071d4c51495faa..3188dabe53b76e 100644 --- a/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.T.cs +++ b/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.T.cs @@ -14,13 +14,14 @@ namespace System.Buffers /// /// are optimized for situations where the same set of values is frequently used for searching at runtime. /// + [DebuggerDisplay("{DebuggerDisplay,nq}")] [DebuggerTypeProxy(typeof(SearchValuesDebugView<>))] public class SearchValues where T : IEquatable? { // Only CoreLib can create derived types private protected SearchValues() { } - /// Used by . + /// Used by s and s for . internal virtual T[] GetValues() => throw new UnreachableException(); /// @@ -80,5 +81,24 @@ internal static int LastIndexOfAnyExcept(ReadOnlySpan span, SearchValues v return values.LastIndexOfAnyExcept(span); } + + private string DebuggerDisplay + { + get + { + T[] values = GetValues(); + + string display = $"{GetType().Name}, Count={values.Length}"; + if (values.Length > 0) + { + display += ", Values="; + display += typeof(T) == typeof(char) ? + "\"" + new string(Unsafe.As(ref values)) + "\"" : + string.Join(",", values); + } + + return display; + } + } } } diff --git a/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValuesDebugView.cs b/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValuesDebugView.cs index adfad1b278468a..00dda551581247 100644 --- a/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValuesDebugView.cs +++ b/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValuesDebugView.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics; + namespace System.Buffers { internal sealed class SearchValuesDebugView where T : IEquatable? @@ -13,6 +15,7 @@ public SearchValuesDebugView(SearchValues values) _values = values; } + [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] public T[] Values => _values.GetValues(); } }