Tag: C#的

C ++枚举使用比整数慢吗?

这真的是一个简单的问题: 我正在编程一个Go程序。 我应该用QVector<int>还是QVector<Player>代表董事会 enum Player { EMPTY = 0, BLACK = 1, WHITE = 2 }; 我想当然,使用Player而不是整数将会变慢。 但我不知道多less,因为我相信使用enum是更好的编码。 我已经做了一些关于分配和比较玩家的testing(而不是int ) QVector<int> vec; vec.resize(10000000); int size = vec.size(); for(int i =0; i<size; ++i) { vec[i] = 0; } for(int i =0; i<size; ++i) { bool b = (vec[i] == 1); } QVector<Player> vec2; vec2.resize(10000000); int size […]

解释glOrtho()的用法?

我无法理解glOrtho的用法。 有人可以解释它用于什么吗? 更新 是否用于设置xy和z坐标限制的范围? glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); 这意味着x,y和z范围从-1到1?

“ClickOnce不支持请求执行级别requireAdministrator”。

所以我正在写一个需要访问registry的应用程序。 我没有触及任何构build设置,希望在添加其他触摸(如描述或名称)之前使其工作。 突然之间,我得到一个不会消失的错误。 ClickOnce does not support the request execution level 'requireAdministrator'. 现在,我没有在这个应用程序中触及ClickOnce。 我所做的只是包含一个请求这些权限的清单文件。 我现在的问题是,这个错误不会消失,我不能编译我的程序。 有什么build议在做什么? (旁注:我即将上床,明天下午我会检查一下)。

在C ++不好的做法中使用assert()?

我倾向于为我的C ++代码添加大量断言,以便在不影响发布版本性能的情况下进行debugging。 现在, assert是一个纯粹的Cmacros,没有考虑C ++机制。 另一方面,C ++定义了std::logic_error ,它是在程序逻辑(因此名称)出现错误的情况下抛出的。 抛出一个实例可能只是完美的,更多的C ++ ish替代assert 。 问题是, assert和abort都立即终止程序而不调用析构函数,因此跳过清理,而手动抛出exception增加了不必要的运行成本。 解决这个问题的一个办法是创build一个自己的断言macrosSAFE_ASSERT ,它的作用就像C对应的一样,但是在失败的时候抛出一个exception。 我可以想到关于这个问题的三点意见: 坚持C的断言。 由于程序立即终止,修改是否正确展开并不重要。 另外,在C ++中使用#define也是一样糟糕。 抛出一个exception,并在main()中捕获它 。 允许代码在程序的任何状态下跳过析构函数都是不好的做法,必须不惜一切代价来避免,所以调用terminate()。 如果抛出exception,则必须被捕获。 抛出一个exception,让它终止程序。 终止程序的exception是可以的,并且由于NDEBUG ,这在发布版本中不会发生。 捕捉是不必要的,并将内部代码的实现细节公开给main() 。 这个问题有一个明确的答案吗? 任何专业的参考? 编辑:跳过析构函数当然是没有不确定的行为。

为什么这个macros被replace为20而不是10?

1. #define NUM 10 2. #define FOO NUM 3. #undef NUM 4. #define NUM 20 5. 6. FOO 当我只运行预处理器时,输出文件包含20个。 但是,据我所知,预处理器只是简单地进行文本replace。 所以这就是我认为正在发生的事情(这显然是错误的,但是爱迪生): NUM被定义为10。 因此,在第二行中,NUM被replace为10.因此,现在我们有“#F10 FOO 10”。 NUM是未定义的。 NUM被重新定义,现在是20。 FOO被replace为第2行,在第4行的重新定义之前是10。 所以我认为输出应该是10而不是20。

在C ++的类初始化器中初始化一个常量数组

我在C ++中有以下类: class a { const int b[2]; // other stuff follows // and here's the constructor a(void); } 问题是,如何初始化初始化列表中的b,因为我不能在构造函数的主体中初始化它,因为b是const ? 这不起作用: a::a(void) : b([2,3]) { // other initialization stuff } 编辑:在这种情况下,我可以有不同的值为b不同的实例,但值已知是实例的生命周期不变。

如何从ArrayList中创build逗号分隔的string?

我将Ids的ArrayList存储在一个处理脚本中,我想将其作为逗号分隔列表吐出,以便输出到debugging日志。 有没有办法,我可以很容易得到这个没有循环的事情? 编辑:感谢Joel指出在.net 2.0及更高版本中可用的列表(T)。 如果你有它可以使事情变得更容易。

打破parallel.foreach?

我如何摆脱parallel.for循环? 我有一个非常复杂的声明,如下所示: Parallel.ForEach<ColorIndexHolder>(ColorIndex.AsEnumerable(), new Action<ColorIndexHolder>((ColorIndexHolder Element) => { if (Element.StartIndex <= I && Element.StartIndex + Element.Length >= I) { Found = true; break; } })); 使用并行类,我可以优化这个过程。 然而; 我无法弄清楚如何打破并行循环? break; 语句抛出以下语法错误: 没有封闭的环路可以打破或继续

如何创build重复的允许的属性

我正在使用从属性类inheritance的自定义属性。 我正在使用它: [MyCustomAttribute("CONTROL")] [MyCustomAttribute("ALT")] [MyCustomAttribute("SHIFT")] [MyCustomAttribute("D")] public void setColor() { } 但显示“重复的”MyCustomAttribute属性“错误。 我如何创build一个重复的允许的属性?

什么是Hashtable的通用版本?

我一直在.NET中学习generics的基础知识。 但是,我没有看到Hashtable的通用等价物。 请分享一些示例C#代码来创buildgenerics哈希表类。