データ モデルのインターフェイス階層を分析するためのリフレクション ツールを作成しました。
カスタム クラスには、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>
私の質問は、私はこのコードを頻繁に実行するため、これを達成するためのより効率的でエレガントな方法はありますか? 私たちのコードベースがますます大きくなると、このリフレクション コードはスケーリングされない可能性があると考えていました。
私はリフレクションにかなり慣れていないので、このリフレクション コードに関する批評家にも喜んでいます。どこで失敗する可能性があり、どこでより安全なコードを記述できるでしょうか? ただし、これは製品コードではなく、開発者向けの単なるツールです。
反映されているコードについて 1 つのポイントは、その中に複数のジェネリック引数を持つジェネリック型がないことです。
編集
stackoverflow コード ブロックの書式設定に関するちょっとした質問です。インラインコードブロックの「`」文字をどうにかしてエスケープできますか? コードブロックの初期化子としてではなく、テキストの通常の文字として使用すると、書式設定がほとんど台無しになりました。