如何转换类型在视觉上体面,视觉工作室风格的字符串
本文关键字:视觉 体面 工作室 风格 字符串 视觉上 何转换 转换 类型 | 更新日期: 2023-09-27 18:00:19
我编写了一个反射工具来分析数据模型的接口层次结构。
在我的自定义类中,我有一个List<Type>
,它包含了我想要显示的所有属性。我写了一个PropertyWrapper
类,让我更容易很好地显示这些特定的属性:
public class PropertyWrapper
{
public PropertyInfo PropertyInfo { get; set; }
public string PropertyType { get; set; }
public string PropertyName { get; set; }
public PropertyWrapper(PropertyInfo propertyInfo)
{
PropertyInfo = propertyInfo;
if (propertyInfo != null)
{
PropertyNameString = propertyInfo.Name;
if (propertyInfo.PropertyType.IsGenericType)
PropertyTypeString = propertyInfo.PropertyType.FullName.Split('`').First().Split('.').Last()
+ "<"
+ propertyInfo.PropertyType.GenericTypeArguments.First()
.FullName.Split('.')
.Last()
+ ">";
else
PropertyTypeString = propertyInfo.PropertyType.FullName.Split('.').Last();
}
}
}
我的Xaml是这样的:
<DataTemplate DataType="PropertyWrapper">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding PropertyType}" FontWeight="Bold" />
<TextBlock Text="{Binding PropertyName}" Margin="5 0 0 0" />
</StackPanel>
</DataTemplate>
我的目标是能够以类似VisualStudio的样式显示某些属性。问题不在于属性名称,更可能是PropertyType
,它实际上看起来像(.ToString()
):System.Collections.Generic.IList'1[System.Object]
。但我想要的是这样一个字符串:IList<Object>
(实际上是IList<object>
,但我们不要太完美主义)。
我的问题是,由于我经常执行这些代码,是否有更高效/更优雅的方法来实现这一点?我在想,如果我们的代码库变得越来越大,这个反射代码可能不会缩放。
我也很高兴有人批评这个反思代码,因为我对反思还很陌生。它在哪里会失败,我在哪里可以写更安全的代码?不过,它不是生产代码,只是开发人员的一个工具。
关于这段代码,有一点需要说明,这反映了,没有任何带有多个泛型参数的泛型类型
编辑
关于stackoverflow代码块格式化的一个小问题。我能以某种方式转义内联代码块中的"`"字符吗?它不是作为代码块初始值设定项使用,而是作为文本中的一个普通字符,它几乎打乱了我的格式。
我不会太关心"字符串处理"的速度。
反射操作要慢得多,所以请关注如何减少该时间。
你可以使用2种方法:
1) 使用仅反射组件使用加载(更快:
Assembly.ReflectionOnlyLoad()
Assembly.ReflectionOnlyLoadFrom()
2) 使用程序集唯一签名缓存结果,并将结果保存到文件中(即使用序列化),因此不需要重新加载已解析的程序集。
希望这能帮助