gpt4 book ai didi

c# - 更整洁的 GetType().ToString() 用于封闭泛型

转载 作者:太空狗 更新时间:2023-10-30 00:15:27 25 4
gpt4 key购买 nike

我不敢相信以前没有人问过这个问题,但由于我无法在 stackoverflow 大海捞针中找到这个特殊的“针”,所以我问了。

我想要一个更简洁的 GetType().ToString() 实现,用于封闭的泛型。我所说的更简洁是指我希望 ToString() 调用返回一个字符串,其格式与我在开发环境中输入的格式相同。

封闭泛型上的默认 GetType().ToString() 将放置 `n,其中 n 是类型的数量,并使用 [ ] 而不是<> 的。

无论如何...代码。

给出以下类:

A a = new A();
C<A> c = new C<A>();
D<A, B> d = new D<A, B>();
E<B, C<A>, D<A, B>> e = new E<B, C<A>, D<A, B>>();

默认的 .ToString() 返回:

AAA.Events.A
AAA.Events.C`1[AAA.Events.A]
AAA.Events.D`2[AAA.Events.A,AAA.Events.B]
AAA.Events.E`3[AAA.Events.B,AAA.Events.C`1[AAA.Events.A],AAA.Events.D`2

我已经编写了一些基本的老式(预 linq)代码来生成:

AAA.Events.A
AAA.Events.C<AAA.Events.A>
AAA.Events.D<AAA.Events.A,AAA.Events.B>
AAA.Events.E<AAA.Events.B,AAA.Events.C<AAA.Events.A>,AAA.Events.D<AAA.Events.A,AAA.Events.B>>

但我真的很希望它返回:

A
C<A>
D<A,B>
E<B,C<A>,D<A,B>>

这是我为证明我的意图而编写的劣质代码:

public static string NeaterString(this Type t)
{
string neater = t.ToString();
if (neater.Contains('`'))
{
while (neater.Contains('`'))
{
neater = neater.Remove(neater.IndexOf('`'), 2);
}
return neater.Replace('[', '<').Replace(']', '>');
}
else return neater;
}

最佳答案

我会尽量避免字符串解析。我的例程如下所示:

public static string GetFriendlyName(Type type)
{
if (type.IsGenericType)
return string.Format("{0}<{1}>", type.Name.Split('`')[0], string.Join(", ", type.GetGenericArguments().Select(x => GetFriendlyName(x))));
else
return type.Name;
}

关于c# - 更整洁的 GetType().ToString() 用于封闭泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14284654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com