Извините, я не мог придумать лучшего заголовка для описания проблемы.
Я использую следующий код, чтобы упростить обновление определенных значений свойств конфигурации.Обратите внимание, что свойства config - это не просто целые числа, а их не просто 2, они просто упрощены для этого примера.
public class Config {
public int VarA { get; set; }
public int VarB { get; set; }
}
private Config config;
private void Update(Config newValues) {
PropertyInfo[] properties = typeof(Config).GetProperties();
foreach (PropertyInfo property in properties) {
object n = property.GetValue(newValues);
property.SetValue(config, n ?? property.GetValue(config));
}
}
Метод Update проверяет свойства newValues и обновляет свойства config, еслиопределено значение.
Я инициализирую конфигурацию такими значениями (просто пример):
config = new Config() { VarA = 1, VarB = 2 };
Debug.WriteLine(config.VarA + " : " + config.VarB); // 1 : 2
Тогда, если я только хочу обновить VarA до значения 0, а некоснитесь VarB, я делаю это:
Update(new Config() { VarA = 0 });
Debug.WriteLine(config.VarA + " : " + config.VarB); // 0 : 0
Но это приводит к тому, что VarB также устанавливается на 0, потому что для newValues не было присвоено значение, и нулевое значение, так как int равно 0, потому что int не обнуляемый,Как сделать так, чтобы VarB оставался значением 2, если он не определен в newValues?