From: Stephen Toub Date: Mon, 22 May 2023 01:55:04 +0000 (-0400) Subject: Add DebuggerDisplay for SearchValues (#86559) X-Git-Tag: accepted/tizen/unified/riscv/20231226.055536~2065 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d2d51c8355457305312ce246a058bdb0e8848418;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Add DebuggerDisplay for SearchValues (#86559) --- 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 071d4c51495..3188dabe53b 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 @@ namespace System.Buffers 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 adfad1b2784..00dda551581 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 @@ namespace System.Buffers _values = values; } + [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] public T[] Values => _values.GetValues(); } }