每当我将光标放在类型,变量名称或方法名称中的某个位置时,Visual Studio都会突出显示该项目,以及同一源文件中所有其他类型,变量名称或方法名称.问题是突出显示颜色使我很难用我习惯的配色方案阅读.
"字体和颜色"中是否有"显示项目"来更改此颜色?或者有没有办法完全关闭这个突出显示?
鉴于这两个陈述......
((object)false) == ((object)false)
((object)false).Equals((object)false)
Run Code Online (Sandbox Code Playgroud)
第一个语句返回false.第二个语句返回true.
我理解为什么第一个语句返回false - 当布尔值被装箱时,它变成一个引用类型,并且两个引用不相等.但是,为什么/第二个陈述如何导致真实?
在我正在处理的代码片段中,另一个开发人员的库以常规的预定时间间隔触发我的一个对象的方法.我遇到的问题是,在达到另一个时间间隔时,前一次对我的对象方法的调用尚未完成,并且第二次调用我的方法再次执行 - 这两个线程最终相互踩踏.我希望能够通过检查包装方法的实现来查看它是否处于处理过程中并跳过块(如果是这样).
一个锁类似于我想要的,但是并没有完全覆盖它,因为一个锁将阻塞,并且一旦前一个实例释放锁,对我的方法的调用就会恢复.这不是我想要发生的事情,因为我可能最终会备份大量这些调用并且等待逐个处理.相反,我想要一个类似于锁的东西,但没有块,所以执行将在通常被锁包围的代码块之后继续.
我想出的是一个与Interlocked.Increment和Interlocked.Decrement一起使用的计数器,允许我使用一个简单的if语句来确定该方法的执行是否应该继续.
public class Processor
{
private long _numberOfThreadsRunning = 0;
public void PerformProcessing()
{
long currentThreadNumber Interlocked.Increment(ref _numberOfThreadsRunning);
if(currentThreadNumber == 1)
{
// Do something...
}
Interlocked.Decrement(ref _numberOfThreadsRunning);
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得我在思考这个问题,可能会有一个更简单的解决方案.
有没有更好的方法来实现同样的结果?
我有一个ID列表(不在表中).我需要找到给定表中不存在哪些ID.通过执行以下SQL语句,我已经能够实现我正在寻找的结果:
SELECT InlineID
FROM (SELECT 11111 AS InlineID UNION ALL SELECT 22222 UNION ALL SELECT 33333) AS Ids
LEFT OUTER JOIN MyTable ON Ids.InlineID = MyTable.ID
WHERE MyTable.ID IS NULL;
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但感觉应该有一种更简单的方法来实现相同的结果,即重复的UNION ALL语句看起来很混乱,尤其是当ID列表变大时.另一个限制是我没有能够创建临时表的权限,因此这些类型的解决方案将无法实现.