Tag: C#的

为什么.net中的数组只能实现IEnumerable而不是IEnumerable <T>?

我正在实现自己的ArrayList类,当我意识到这一点时,感到很惊讶 public System.Collections.Generic.IEnumerator<T> GetEnumerator() { return _array.GetEnumerator(); } 没有工作。 什么原因数组不在IE中实现IEnumerator? 有没有解决办法? 谢谢

Microsoft代码合同和CI构build服务器

我们正在迁移到.NET 4,并对实施新的Design By Contractfunction非常感兴趣。 正如我们所知, Code Contract引擎需要安装Code Contract插件 和VS Ultimate或Premium(用于静态检查)。 这是我的问题: 我可以使用代码合同重写而不在CI构build服务器(TeamCity)上安装VS? 有没有任何msbuild任务来执行合同检查? 您是否使用代码合同对CI构build进行validation?

如何检查枚举值是否有效?

我正在读取一个二进制文件的enum值,并希望检查值是否真的是enum值的一部分。 我该怎么做? #include <iostream> enum Abc { A = 4, B = 8, C = 12 }; int main() { int v1 = 4; Abc v2 = static_cast< Abc >( v1 ); switch ( v2 ) { case A: std::cout<<"A"<<std::endl; break; case B: std::cout<<"B"<<std::endl; break; case C: std::cout<<"C"<<std::endl; break; default : std::cout<<"no match found"<<std::endl; } […]

printf long long int in C with GCC?

我如何使用GCC在C99中使用printf long long int和unsigned long long int ? 我已经search了其他build议使用%lldpost,但是它给出了这些警告: 警告#1:格式为[-Wformat] |的未知转换types字符'l' 警告#2:格式参数太多[-Wformat-extra-args] | 对于以下尝试: #include <stdio.h> int main() { long long int x = 0; unsigned long long int y = 0; printf("%lld\n", x); printf("%llu\n", y); }

在TeamCity中包含NuGet包

我最近开始使用NuGet来pipe理外部软件包。 现在我只需要它的NLog。 一切工作正常,当我在VS 2012中生成项目。但是,我尝试作为一个CI服务器的TeamCity(我是相当新的CI),它给了我以下错误: [Csc] SomeNamespace\SomeClass.cs(10, 7): error CS0246: The type or namespace name 'NLog' could not be found (are you missing a using directive or an assembly reference?) (这个错误在我使用NLog的地方都会重复) 现在我没有在SVN中包含'packages /'文件夹,因为我认为不包括二进制文件是一个很好的做法,并让TeamCity中的MSBuild自行下载。 但显然不是这样做的。 我在SVN中包含'packages.xml'文件。 我可以检查什么是错误的? 更新感谢@DavidBrabant我被推向了正确的方向。 但是,我现在在TeamCity中出现以下错误: Package restore is disabled by default. To give consent, open the Visual Studio Options dialog, click on Package […]

函数参数的破坏顺序是什么?

如果分别用参数a_1 ,…, a_n调用types为T_1 ,…, T_n参数为p_1 ,…, p_n的函数f ,并且它的主体抛出一个exception,按照什么顺序完成或返回争论被毁,为什么? 如果可能,请提供标准参考。 编辑:我其实想问一下关于函数的“参数”,但是当TC和Columbo设法解决了我的困惑时,我将这个问题留给了参数,并且询问了一个关于参数的新的单独问题 。 请参阅关于这个问题的评论。

强制GCC通知共享库中未定义的引用

我有一个与另一个(第三方)共享库链接的共享库。 我的共享库然后在我的应用程序中使用dlopen加载。 所有这一切工作正常(假设文件是​​在正确的path等)。 现在,问题是,我甚至不需要指定链接我的库时链接到第三方共享库。 GCC接受它而不报告有关未定义参考的错误。 所以,这个问题; 我如何强制GCC通知我未定义的引用 ? 如果我更改我的库是(暂时)一个可执行文件,我得到未定义的引用(当不提供库到链接器)。 (如果我指定,工作正常。) 即,完成以下工作: g++ -fPIC -shared -o libb.so bo g++ -fPIC -shared -o liba.so ao g++ -o a.exe a.cpp 如果第二行不发出错误,第三行则报告未定义的引用。 示例代码: 啊: class a { public: void foobar(); }; a.cpp: #include "ah" #include "bh" void a::foobar() { b myB; myB.foobar(); } int main() { a myA; myA.foobar(); […]

在C#中的常量DateTime

我想把一个常量date时间放在一个属性参数中,我如何使一个常量date时间? 它与EntLibvalidation应用程序块的ValidationAttribute有关,但也适用于其他属性。 当我这样做: private DateTime _lowerbound = new DateTime(2011, 1, 1); [DateTimeRangeValidator(_lowerbound)] 我去拿: An object reference is required for the non-static field, method, or property _lowerbound 并通过这样做 private const DateTime _lowerbound = new DateTime(2011, 1, 1); [DateTimeRangeValidator(_lowerbound)] 我去拿: types“System.DateTime”不能被声明为const 有任何想法吗? 这样做是不可取的: [DateTimeRangeValidator("01-01-2011")]

限制通过并行任务库运行的活动任务数量的最佳方法

考虑一个拥有大量需要处理的作业的队列。 队列的限制是一次只能得到1份工作,无法知道有多less工作。 这些工作需要10秒才能完成,并且涉及很多等待Web服务的响应,因此不受CPU限制。 如果我使用这样的东西 while (true) { var job = Queue.PopJob(); if (job == null) break; Task.Factory.StartNew(job.Execute); } 然后,它会激烈地从队列中挤出工作,比完成工作快得多,耗尽内存并落在它的屁股上。 > < 我不能使用(我不认为) ParallelOptions.MaxDegreeOfParallelism,因为我不能使用Parallel.Invoke或Parallel.ForEach 我find了3个替代品 用TaskreplaceTask.Factory.StartNew Task task = new Task(job.Execute,TaskCreationOptions.LongRunning) task.Start(); 这似乎有点解决问题,但我不清楚这是怎么回事 ,如果这是最好的方法。 创build一个限制并发度的自定义任务计划程序 使用像BlockingCollection这样的东西,在开始时将作业添加到集合,并在完成时移除以限制可以运行的数字。 #1我必须相信自动做出正确的决定,#2 /#3我必须计算出可以运行的最大数量的任务。 我是否正确地理解了这一点 – 哪一个更好,或者有另一种方法? 编辑 – 这是我从下面的答案,生产者 – 消费者模式。 除了整体吞吐量的目的不是让工作更快地出队比可以处理,并没有多个线程轮询队列(这里没有显示,但这是一个非阻塞操作,并将导致巨大的交易成本,如果从多个地方高频调查) 。 // BlockingCollection<>(1) will block if try to add […]

C ++“命名参数成语”与Boost :: Parameter库

我已经查看了命名参数Idiom和Boost :: Parameter库 。 每个人都有什么优势? 是否有理由相互select一个,或者在某些情况下,每个人都可以比另一个更好(如果是,在什么情况下)?