在实现自定义设置提供程序时,我注意到访问设置属性的值会将其IsDirty
标志更改为true
.
// Arrange
var property = new SettingsProperty("property1")
{
PropertyType = typeof(Color),
DefaultValue = "Green"
};
// Act
var result = new SettingsPropertyValue(property);
// Assert
Assert.That(result.IsDirty, Is.False);
Assert.That(result.PropertyValue, Is.EqualTo(Color.Green));
Assert.That(result.IsDirty, Is.False); // <-- Assertion fails
Reflector 为我回答了为什么PropertyValue
getter 行为如此的问题 - 它包含如下语句:
if (_Value != null && !Property.PropertyType.IsPrimitive && !(_Value is string) && !(_Value is DateTime))
{
_UsingDefaultValue = false;
_ChangedSinceLastSerialized = true;
_IsDirty = true;
}
乍一看,任何人都可以对这种奇怪的行为有所了解吗?