次のようなインターフェイスについて考えてみます。
new Provider().For(myClass).ExcludeProperties("Height", "Width");
public IEditableStateProvider For(object target) {...}
public IEditableStateProvider ExcludePropertyNames(params string[] propertyNames) {...}
params string[] propertyNames
argをに置き換えて、params Expression<Func<object>>[] propertyNames
代わりに次のようにします。
new Provider().For(myClass).ExcludeProperties(()=>Height, ()=>Width);
私はこれに似たコードを見たので、うまくいくはずだと思いますが、まだ取得していません。どうすればこれを機能させることができますか?
編集-ジェネリックスなしでこれを行う
これは、ジェネリックスなしで型推論が機能している場所で私が調べていたオープンソースプロジェクトのコードです。私は同じことをしようとしていましたが、型推論がどこから来ているのかわかりません(私はそれが機能しているのを見ています!)
// USAGE (here this is being called from code-behind of a WPF window
private void TrackSelectedTab() {
Services.Tracker.Configure(tabControl)
.AddProperties(() => tabControl.SelectedIndex);
Services.Tracker.ApplyState(tabControl);
}
private void TrackMainWindow() {
Services.Tracker.Configure(this)
.AddProperties(
() => Height,
() => Width,
() => Left,
() => Top,
() => WindowState)
.SetKey("MainWindow")
.SetMode(PersistModes.Automatic);
Services.Tracker.ApplyState(this);
}
// Collab classes
public class SettingsTracker
{
public TrackingConfiguration Configure(object target) {
...
return config;
}
}
public class TrackingConfiguration
{
public TrackingConfiguration AddProperties(params Expression<Func<object>>[] properties) {
...
return this;
}
}
static class Services
{
public static readonly SettingsTracker Tracker = new SettingsTracker(ObjectStore);
}