我正在做一些速度测试,我注意到Enum.HasFlag比使用按位操作慢大约16倍.
有谁知道Enum.HasFlag的内部以及为什么它如此之慢?我的意思是两倍慢不会太糟糕但是当它慢了16倍时它会使该功能无法使用.
如果有人想知道,这是我用来测试其速度的代码.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace app
{
public class Program
{
[Flags]
public enum Test
{
Flag1 = 1,
Flag2 = 2,
Flag3 = 4,
Flag4 = 8
}
static int num = 0;
static Random rand;
static void Main(string[] args)
{
int seed = (int)DateTime.UtcNow.Ticks;
var st1 = new SpeedTest(delegate
{
Test t = Test.Flag1;
t |= (Test)rand.Next(1, 9);
if (t.HasFlag(Test.Flag4))
num++;
});
var st2 = new SpeedTest(delegate
{
Test t = …Run Code Online (Sandbox Code Playgroud) 在我的C#应用程序中,我想显示一个上下文菜单,但是如果在打开上下文菜单时按住SHIFT键,我想在菜单中添加特殊选项.
我目前正在使用GetKeyStateAPI来检查SHIFT键.它在我的计算机上工作正常,但是使用非英语Windows的用户表示它根本不起作用.
我还读到在Win32 API中打开上下文菜单时,菜单中应该显示一个标志EXTENDEDVERBS.在C#中EventArgs,Opening事件不包含(据我所知)一个属性指示EXTENDEDVERBS或是否按下任何修改键.
这是我现在在" Opening"事件中使用的代码:
// SHIFT KEY is being held down
if (Convert.ToBoolean(GetKeyState(0x10) & 0x1000))
{
_menuStrip.Items.Add(new ToolStripSeparator());
ToolStripMenuItem log = new ToolStripMenuItem("Enable Debug Logging");
log.Click += new EventHandler(log_Click);
log.Checked = Settings.Setting.EnableDebugLogging;
_menuStrip.Items.Add(log);
}
Run Code Online (Sandbox Code Playgroud)
如果GetKeyState是正确的方法,我的代码是否正确检测到按下了SHIFT键?
当我第一次按下控制键(左键)然后单击鼠标左键时,为什么以下代码被执行.我正在修改现有代码,下面的代码已经存在.我想以前没有人尝试过它,按下控制键,它只用于点击鼠标左键,它一直适用于那种情况.但是我想要在按下控制键的同时按下鼠标左键时执行不同的代码.
private void treeList1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
TreeList tree = sender as TreeList;
if (e.Button == MouseButtons.Right && ModifierKeys == Keys.None && tree.State == TreeListState.Regular)
{
//the code that is here gets executed
MessageBox.Show("I am here");
}
}
Run Code Online (Sandbox Code Playgroud)
我非常感谢任何提示或帮助.
PS我想补充一点,在上面的情况下,当我检查e.button值时,虽然我按了鼠标左键和Ctrl键,但它显示等于Right.这对我来说是一个谜.
亲爱的StackOverflow研究员:我发现了问题,因为我在MAC上使用VM,我必须在我的虚拟机首选项上禁用一些键映射,现在我的原始代码工作.感谢你的帮助.