2
我有一个设置服务类,它从文件加载设置,或者如果它们已经加载,只是从本地设置对象返回值。我想通过set访问设置并使用lambda表达式参数获取方法。从lambda表达式参数读取和写入模型属性
我定义了一个私人的getSettings方法:
private async Task<T> GetSetting<T>(Func<Settings, T> property, T defaultValue)
{
if (_settings != null) return property(_settings);
await TryGetSettingsFromFile();
return _settings != null ? property(_settings) : defaultValue;
}
这样我就可以得到这样一个值:
public async Task<int> GetAppStartUpTimes()
{
return await GetSetting(s => s.AppStartUpTimes, 0);
}
可正常工作,但我无法弄清楚如何使一个SetSetting方法。我想要做这样的事情:
public async Task SetAppStartUpTimes(int value)
{
await SetSetting(s => s.AppStartUpTimes, value);
}
对于SetSetting方法我试过:
private async Task SetSetting<T>(Expression<Func<Settings, T>> property, T newValue)
{
var propertyInfo = (property.Body as MemberExpression).Member as PropertyInfo;
propertyInfo.SetValue(_settings, newValue);
}
但的PropertyInfo总是空。我究竟做错了什么?
好,'.Member'可能是'PropertyInfo'或'FieldInfo'。 –
我试过你的代码,并且它工作正常,如果AppStartUpTimes是一个属性。它是Settings类的一个属性还是一个字段? –
@MaksimSimkin确实是这个问题。这不是一个财产,而是一个领域。现在,它的工作,非常感谢! – Alpine13