| File: Debugger\DebuggerDisplayHelpers.cs | Web Access |
| Project: src\src\Core\src\Core.csproj (Microsoft.Maui) |
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using System.Text; namespace Microsoft.Maui; /// <summary> /// Inspired on https://github.com/dotnet/aspnetcore/blob/befc463e34b17edf8aee1fbf9dec44c75f13000b/src/Shared/Debugger/DebuggerHelpers.cs from Asp.NET /// </summary> static class DebuggerDisplayHelpers { const string NullString = "(null)"; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string GetDebugText(string key1, object? value1, bool includeNullValues = true) { return GetDebugText([Create(key1, value1)], includeNullValues); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string GetDebugText(string key1, object? value1, string key2, object? value2, bool includeNullValues = true) { return GetDebugText([Create(key1, value1), Create(key2, value2)], includeNullValues); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string GetDebugText(string key1, object? value1, string key2, object? value2, string key3, object? value3, bool includeNullValues = true) { return GetDebugText([Create(key1, value1), Create(key2, value2), Create(key3, value3)], includeNullValues); } public static string GetDebugText(ReadOnlySpan<KeyValuePair<string, object?>> values, bool includeNullValues = true) { var size = values.Length; if (size is 0) { return string.Empty; } var sb = new StringBuilder(); var first = true; for (var i = 0; i < size; i++) { var kvp = values[i]; if (HasValue(kvp.Value) || includeNullValues) { if (first) { first = false; } else { sb.Append(", "); } sb.Append(kvp.Key); sb.Append(" = "); if (kvp.Value is null) { sb.Append(NullString); } else if (kvp.Value is string s) { sb.Append(s); } else if (kvp.Value is IEnumerable enumerable) { var firstItem = true; foreach (var item in enumerable) { if (firstItem) { firstItem = false; } else { sb.Append(','); } sb.Append(item); } } else { sb.Append(kvp.Value); } } } return sb.ToString(); } static bool HasValue([NotNullWhen(true)] object? value) { if (value is null) { return false; } // Empty collections don't have a value. if (value is not string && value is IEnumerable enumerable && !enumerable.GetEnumerator().MoveNext()) { return false; } return true; } static KeyValuePair<string, object?> Create(string key, object? value) => new KeyValuePair<string, object?>(key, value); }