我编写了一个反射工具来分析我们数据模型的接口层次结构。
在我的自定义类中,我有一个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>
我的目标是能够以类似 Visual Studio 的样式显示某些属性。问题不在于属性名称,更有可能是PropertyType
,它实际上看起来像这样 ( .ToString()
): System.Collections.Generic.IList'1[System.Object]
。但我想要的是这样的字符串:(IList<Object>
实际上IList<object>
,但我们不要太完美主义)。
我的问题是,由于我经常执行此代码,是否有更有效/优雅的方法来实现这一点?我在想,如果我们的代码库变得越来越大,这个反射代码可能无法扩展。
我也很高兴批评有关此反射代码的批评,因为我对反射还很陌生。它会在哪里失败,我在哪里可以编写更安全的代码?但是,它不是生产代码,只是开发人员的工具。
关于代码,要说的一点是,其中没有任何具有多个泛型参数的泛型类型。
编辑
关于stackoverflow代码块格式的一个小问题。我可以以某种方式转义内联代码块中的“`”字符吗?不将其用作代码块初始化程序,而是将其用作文本中的普通字符,它几乎弄乱了我的格式。