草庐IT

c# - 为什么当操作数小于 32 位时,移位操作总是产生有符号整数

为什么对无符号整数的移位运算会得到一个无符号的结果,而对更小的无符号操作数的运算会得到一个有符号的整数?intsignedInt=1;intshiftedSignedInt=signedInt 最佳答案 shiftoperators仅为这些情况预定义(左移):intoperator表达式uintshiftedUnsignedShort=unsignedShort被解释为(1)-st情况(implicitup-castingfromushorttoint和(int)2),因此它对非法转换发出警告(没有从int结果到ushort的隐式转

c# - 是否有一个 *总是* 产生 null 的 VB.NET 表达式?

我们都知道VB的Nothing与C#的null类似,但不等同。(如果您不知道,请先查看thisanswer。)出于好奇,我想知道以下内容:是否存在始终产生null的VB.NET表达式?举个具体的例子,拿下面的语句:DimoAsObject=If(myBool,5,...)是否可以将...替换为某些东西,例如o是5而myBool是true和Nothing/null当myBool为false时?明显行不通的解决方案:Nothing(参见上面链接答案的问题),DirectCast(Nothing,Object)(使用OptionStrictOn时抛出编译时错误),DirectCast(Not

c# - 为什么 C# 编译器会产生方法调用以在 IL 中调用 BaseClass 方法

假设我们在C#中有以下示例代码:classBaseClass{publicvirtualvoidHelloWorld(){Console.WriteLine("HelloTarik");}}classDerivedClass:BaseClass{publicoverridevoidHelloWorld(){base.HelloWorld();}}classProgram{staticvoidMain(string[]args){DerivedClassderived=newDerivedClass();derived.HelloWorld();}}当我输入以下代码时:.methodpr

c# - 编译 lambda 表达式会产生带有 Closure 参数的委托(delegate)

当我使用Expression.Lambda(...).Compile()时为了从表达式树创建委托(delegate),结果是第一个参数为Closure的委托(delegate).publicstaticFuncCreateTest(){ParameterExpressiona=Expression.Parameter(typeof(T));ParameterExpressionb=Expression.Parameter(typeof(T));Expressionaddition=Expression.Add(a,b);return(Func)Expression.Lambda(add

c# - 如何根据频率产生声音?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:CreatingsineorsquarewaveinC#我想生成声音。要么是这样的:MakeSound(frequency,duration);或者:MakeSound(MyArrayOfSamples);我找到了一个叫做:Microsoft.Directx.DirectSound的东西,但是我读到它已经停产了。我找不到它作为VisualStudio(2010)中引用的选项。我找到了thislink根据我读过的内容,应该包括它,但我犹豫要不要使用2006年的东西,因为它可能不再受支持。和thisone说它适用

c# - Parallel.For 和 For 产生不同的结果

如果我运行这个测试:varr=newRandom();varints=newint[13];Parallel.For(0,2000000,i=>{varresult=r.Next(1,7)+r.Next(1,7);ints[result]+=1;});我得到以下结果:2:92,144453:0,417654:0,622455:0,825256:1,040357:1,252158:1,05319:0,834110:0,633411:0,419212:0,2109当我使用常规For时:for(inti=0;i输出是:2:2,77973:5,586454:8,34145:11,099356:

c# - 产生一个新线程以打开一个新窗口并从另一个线程关闭它

现在我有C#代码在不同的线程中生成一个新窗口,这有效,但是一旦新生成的窗口打开,它就会关闭并且线程结束。我将如何做到这一点,以便可以从第一个线程关闭新生成的窗口?这是当前生成工作方式的“树”:主线程--使用主线程中的一个函数在单独的线程中启动另一个函数来打开w窗口,导致窗口使用该线程。基本上我只希望两个窗口各有自己的线程。并能够从第一个窗口线程控制生成的辅助窗口。 最佳答案 我敢打赌你正在做的是这样的:newThread(()=>newTestForm().Show()).Start();因为这会使窗口立即消失,就像您描述的那样。试

c# - 为什么重用 DataContext 会对性能产生负面影响?

经过fairamountofresearch还有一些errors,我修改了我的代码,以便在每次查询数据库或插入数据时创建一个新的DataContext。并且频繁查询数据库-对于处理的25万笔交易中的每笔交易,在插入交易之前查询数据库以获得客户ID、部门ID和类别。所以现在我正在尝试优化代码,因为它每秒只处理大约15笔交易。我删除了一些无关的查询并添加了一些索引并将其提高到每秒30个。然后我想即使每个人都说DataContext是轻量级的,但每次事务创建一个新的4次还是要花一些钱,所以我尝试重用DataContext。令我惊讶的是,重用上下文会导致性能下降到每秒10个事务!为什么会这样?

c# - Parallel.ForEach 不断产生新线程

当我在我的程序中使用Parallel.ForEach时,我发现有些线程似乎永远不会结束。事实上,它一遍又一遍地产生新线程,这是我没有预料到也绝对不希望出现的行为。我能够使用以下代码重现此行为,就像我的“真实”程序一样,它们都大量使用处理器和内存(.NET4.0代码):publicclassNode{publicNodePrevious{get;privateset;}publicNode(Nodeprevious){Previous=previous;}}publicclassProgram{publicstaticvoidMain(string[]args){DateTimestar

c# - Environment.CurrentDirectory 在运行已安装的应用程序时产生意外结果

背景:我为我的应用构建了一个安装程序,我所有的dll和内容文件都被正确地复制到C:\ProgramFiles\MyCompany\MyApp目录。当我从VisualStudio运行我的应用程序时,一切正常。但是,当我运行我的应用程序的已安装版本时,我收到了DirectoryNotFoundException。问题似乎出在Environment.CurrentDirectory上。我期望Environment.CurrentDirectory是..."C:\\ProgramFiles\\MyCompany\\MyApp"...但实际上..."C:\\DocumentsandSetting