我正在寻找使用static bool编写C#简单语句的方法,该语句第一次返回true,然后始终返回false。
<script>
function getTime() {
$("#updateButton").prop("disabled", true);
return true; // this to continue with the original <form> process
}
</script>
这可行,但是我正在寻找没有临时变量(此处为“旧”)的较短内容。
谢谢。
答案 0 :(得分:2)
您可以在C#中返回赋值的结果,这意味着您可以进行比较,如果firstTime
是true
,则可以将赋值的负数返回到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);