C# Class 属性 Getter 自动调用
C# Class Property Getter Invoked Automatically
我有 2 个 class 属性定义如下:
private static string _validationError;
public static string ValidationError
{
get {
var temp = _validationError;
_validationError = "abc";
return temp;
}
set { _validationError = value; }
}
public static string CurrentError { get; set; }
一个方法:
public static bool IsErrorStringEmpty()
{
Console.WriteLine("dddd");
return false;
}
测试方法:
[TestMethod]
public void ValidationErrorTest()
{
CurrentError = "My Error";
var empty = IsErrorStringEmpty();
}
当我调试这个测试时,这是我看到的行为:
在命中测试方法的第2行之前,ValidationError = null(预期)。
当它进入 IsErrorStringEmpty() 时,在命中第一行之前,ValidationError = null(预期)。
然后,当它到达第一行时,ValidationError = "abc"。我根本不知道这个 getter 是如何被调用的,即使到目前为止我还没有明确的代码来访问 ValidationError 属性.
我在getter中设置了断点,但是没有断点,调用堆栈如下所示。
我确定它在某个地方,但我似乎找不到它。非常感谢任何指点!
与量子效应一样,您可以通过观察来改变结果。看你在调试什么。您尝试查看 ValidationError
中的内容,因此您正在调用 getter.
您应该在调试器中添加 _validationError
而不是 ValidationError
。
更好的问题是为什么这个 属性 在您的代码第二次暂停时没有更新。您之前观察过 属性 并且没有在任何地方重置它,所以这应该变成 "abc"
.
您正在调试器中调用 getter。当在手表 window 中显示的 属性 的评估中执行代码时,它确实在执行,具有真正的副作用。
尝试观看 _validationError
。
getter 中的副作用可能会让您陷入困境。最好避开它们。
我有 2 个 class 属性定义如下:
private static string _validationError;
public static string ValidationError
{
get {
var temp = _validationError;
_validationError = "abc";
return temp;
}
set { _validationError = value; }
}
public static string CurrentError { get; set; }
一个方法:
public static bool IsErrorStringEmpty()
{
Console.WriteLine("dddd");
return false;
}
测试方法:
[TestMethod]
public void ValidationErrorTest()
{
CurrentError = "My Error";
var empty = IsErrorStringEmpty();
}
当我调试这个测试时,这是我看到的行为:
在命中测试方法的第2行之前,ValidationError = null(预期)。
当它进入 IsErrorStringEmpty() 时,在命中第一行之前,ValidationError = null(预期)。
然后,当它到达第一行时,ValidationError = "abc"。我根本不知道这个 getter 是如何被调用的,即使到目前为止我还没有明确的代码来访问 ValidationError 属性.
我在getter中设置了断点,但是没有断点,调用堆栈如下所示。
我确定它在某个地方,但我似乎找不到它。非常感谢任何指点!
与量子效应一样,您可以通过观察来改变结果。看你在调试什么。您尝试查看 ValidationError
中的内容,因此您正在调用 getter.
您应该在调试器中添加 _validationError
而不是 ValidationError
。
更好的问题是为什么这个 属性 在您的代码第二次暂停时没有更新。您之前观察过 属性 并且没有在任何地方重置它,所以这应该变成 "abc"
.
您正在调试器中调用 getter。当在手表 window 中显示的 属性 的评估中执行代码时,它确实在执行,具有真正的副作用。
尝试观看 _validationError
。
getter 中的副作用可能会让您陷入困境。最好避开它们。