次のクラスを検討してください
public class Lorem
{
public double LoremsDouble { get; set; }
}
public class Ipsum
{
public Lorem IpsumsLorem { get; set; }
public Dolor IpsumsDolor { get; set; }
}
いいえ、 property へのメタデータとして、次のIpsumsDolor
ような属性が必要です: The property IpsumsDolor
has a related to LoremsDouble
on IpsumsLorem
. これは私のコンセプトに何か問題があるように聞こえますが、そうではありません!
たとえば、属性に文字列プロパティを設定し、リフレクションを介して使用することでこれを行うことができますがstring RelatedObject
、string PropertyName
残念ながら文字列は絶対に嫌いです。
サイドノート
プロパティ通知が通常文字列を介して起動される WPF および XAML から来ています。たとえば、
RaisePropertyChanged("LoremsDouble");
これをタイプセーフにするために式を使用しています:
RaisePropertyChanged(() => LoremsDouble);
ここで、引数は a ですExpression<Func<T>>
。これを最後に文字列に変換します。次のように、これ以上問題はありません。
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
{
var body = (MemberExpression) propertyExpression.Body;
var propertyName = body.Member.Name;
...
}
サイドノートの終わり
わかりました、今、私は次のことができればいいのにと思います
public class Ipsum
{
public Lorem IpsumsLorem { get; set; }
[RelatedProperty(() => IpsumsLorem.LoremsDouble)]
public Dolor IpsumsDolor { get; set; }
}
しかし、(a) 属性をインスタンス化するときにオブジェクトがなくIpsumsLorem
、(b) 式が有効な属性パラメーターではないため、明らかにできません。
タイプセーフな方法で、あるプロパティを他のプロパティの値のプロパティに関連付けることを達成するための良いアイデアはありますか?