Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,43 +49,61 @@ internal static class TypeNameHelper
/// <returns>The pretty printed type name.</returns>
public static string GetTypeDisplayName(Type type, bool fullName = true, bool includeGenericParameterNames = false, bool includeGenericParameters = true, char nestedTypeDelimiter = DefaultNestedTypeDelimiter)
{
var builder = new StringBuilder();
ProcessType(builder, type, new DisplayNameOptions(fullName, includeGenericParameterNames, includeGenericParameters, nestedTypeDelimiter));
return builder.ToString();
StringBuilder? builder = null;
string? name = ProcessType(ref builder, type, new DisplayNameOptions(fullName, includeGenericParameterNames, includeGenericParameters, nestedTypeDelimiter));
return name ?? builder?.ToString() ?? string.Empty;
}

private static void ProcessType(StringBuilder builder, Type type, in DisplayNameOptions options)
private static string? ProcessType(ref StringBuilder? builder, Type type, in DisplayNameOptions options)
{
if (type.IsGenericType)
{
Type[] genericArguments = type.GetGenericArguments();
builder ??= new StringBuilder();
ProcessGenericType(builder, type, genericArguments, genericArguments.Length, options);
}
else if (type.IsArray)
{
builder ??= new StringBuilder();
ProcessArrayType(builder, type, options);
}
else if (_builtInTypeNames.TryGetValue(type, out string? builtInName))
{
if (builder is null) return builtInName;

builder.Append(builtInName);
}
else if (type.IsGenericParameter)
{
if (options.IncludeGenericParameterNames)
{
if (builder is null) return type.Name;

builder.Append(type.Name);
}
}
else
{
string name = options.FullName ? type.FullName! : type.Name;
builder.Append(name);

if (builder is null)
{
if (options.NestedTypeDelimiter != DefaultNestedTypeDelimiter)
{
return name.Replace(DefaultNestedTypeDelimiter, options.NestedTypeDelimiter);
}

return name;
}

builder.Append(name);
if (options.NestedTypeDelimiter != DefaultNestedTypeDelimiter)
{
builder.Replace(DefaultNestedTypeDelimiter, options.NestedTypeDelimiter, builder.Length - name.Length, name.Length);
}
}

return null;
}

private static void ProcessArrayType(StringBuilder builder, Type type, in DisplayNameOptions options)
Expand All @@ -96,7 +114,7 @@ private static void ProcessArrayType(StringBuilder builder, Type type, in Displa
innerType = innerType.GetElementType()!;
}

ProcessType(builder, innerType, options);
ProcessType(ref builder!, innerType, options);

while (type.IsArray)
{
Expand Down Expand Up @@ -143,7 +161,7 @@ private static void ProcessGenericType(StringBuilder builder, Type type, Type[]
builder.Append('<');
for (int i = offset; i < length; i++)
{
ProcessType(builder, genericArguments[i], options);
ProcessType(ref builder!, genericArguments[i], options);
if (i + 1 == length)
{
continue;
Expand Down