第一次返回true的静态属性,此后始终返回false

时间:2019-07-10 22:19:13

标签: c#

我正在寻找使用static bool编写C#简单语句的方法,该语句第一次返回true,然后始终返回false。

<script>
function getTime() {
    $("#updateButton").prop("disabled", true);
    return true; // this to continue with the original <form> process
}
</script>

这可行,但是我正在寻找没有临时变量(此处为“旧”)的较短内容。

谢谢。

3 个答案:

答案 0 :(得分:2)

您可以在C#中返回赋值的结果,这意味着您可以进行比较,如果firstTimetrue,则可以将赋值的负数返回到false

private static bool firstTime = true;
public static bool FirstTime => firstTime ? !(firstTime = false) : firstTime;

但是您的方式更容易理解。

注意:这与您的原始代码(您所说的“有效”)完全一样是线程安全的,这意味着它不是线程安全的。

答案 1 :(得分:2)

如果您想要线程安全和紧凑的工具,Interlocked.Exchange()非常适合。它将设置您的变量并以线程安全的方式返回旧值(正是您在代码中所做的操作)。

唯一的警告是您的私人领域不能成为笨蛋。但是无论如何,公共财产背后发生的任何事情都不会在外部产生影响。

static int _isFirstTime = 1;
public static bool IsFirstTime => Interlocked.Exchange(ref _isFirstTime, 0) != 0;

答案 2 :(得分:0)

您可能会滥用&&如下所示的短路现象。但是不要在工作中使用它,因为第一个示例更容易阅读。而且它不是线程安全的。

static bool _firstTime = true;

private static bool FirstTime
    => _firstTime && !(_firstTime = false);