さて、すべてのプロパティを取得し、どのプロパティが文字列で書き込み可能であるかを見つけるのは簡単です。LINQを使用するとさらに簡単になります。
var props = instance.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
// Ignore non-string properties
.Where(prop => prop.PropertyType == typeof(string))
// Ignore indexers
.Where(prop => prop.GetIndexParameters().Length == 0)
// Must be both readable and writable
.Where(prop => prop.CanWrite && prop.CanRead);
foreach (PropertyInfo prop in props)
{
string value = (string) prop.GetValue(instance, null);
if (value != null)
{
value = value.Trim();
prop.SetValue(instance, value, null);
}
}
複雑なプロパティの冗長な計算を避けるために、トリミングが実際に違いを生む場合にのみプロパティを設定することをお勧めします。そうでない場合は、問題にならない可能性があります。
必要に応じてパフォーマンスを向上させるさまざまな方法があります。たとえば、次のようなものです。
- タイプごとに関連するプロパティをキャッシュするだけです
Delegate.CreateDelegate
ゲッターとセッターのデリゲートを構築するために使用する
- 式ツリーを使用している可能性がありますが、ここで役立つかどうかはわかりません。
ただし、パフォーマンスが実際に問題にならない限り、これらの手順は実行しません。