3

カスタム設定プロバイダーを実装しているときに、設定プロパティの値にアクセスすると、その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

PropertyValueReflector は、ゲッターがこのように動作する理由についての質問に対する答えを提供してくれます。次のようなステートメントが含まれています。

if (_Value != null && !Property.PropertyType.IsPrimitive && !(_Value is string) && !(_Value is DateTime))
{
    _UsingDefaultValue = false;
    _ChangedSinceLastSerialized = true;
    _IsDirty = true;
}

一見すると奇妙な振る舞いに、誰かが光を当てることができますか?

4

1 に答える 1