Tag: C#的

ILookup <TKey,TVal>与IGrouping <TKey,TVal>

我一直在阐明ILookup<TKey, TVal>和IGrouping<TKey, TVal>之间的差异,而且我很好奇,如果我现在正确地理解它的话。 LINQ通过生成IGrouping项目的序列,同时也给了我一个ToLookup扩展方法来加强这个问题。 所以直到我看得更仔细,才觉得它们是一样的。 var q1 = from n in N group n by n.MyKey into g select g; // q1 is IEnumerable<IGrouping<TKey, TVal>> 这相当于: var q2 = N.GroupBy(n => n.MyKey, n => n); // q2 is IEnumerable<IGrouping<TKey, TVal>> 看起来很像: var q3 = N.ToLookup(n => n.MyKey, n => n); // q3 is ILookup<TKey, TVal> […]

为什么shared_ptr <void>是合法的,而unique_ptr <void>是不合格的?

这个问题真的很符合标题:我很想知道这种差异的技术原因是什么,但也有理由吗? std::shared_ptr<void> sharedToVoid; // legal; std::unique_ptr<void> uniqueToVoid; // ill-formed;

为什么constvariables有时不需要被lambda捕获?

考虑下面的例子: #include <cstdlib> int main() { const int m = 42; [] { m; }(); // OK const int n = std::rand(); [] { n; }(); // error: 'n' is not captured } 为什么我需要在第二个lambda中捕获n ,而在第一个lambda中不是m ? 我在C ++ 14标准中检查了第5.1.2节( Lambdaexpression式 ),但我无法find一个理由。 你能指出我的解释这一段吗? 更新:我观察到GCC 6.3.1和7(trunk)的行为。 在这两种情况下,Clang 4.0和5(trunk)都会失败并发生错误( variable 'm' cannot be implicitly captured in a lambda […]

如何保持.NET控制台应用程序运行?

考虑一个控制台应用程序,它在一个单独的线程中启动一些服务。 所有它需要做的是等待用户按Ctrl + Cclosures它。 以下哪个方法是更好的方法? static ManualResetEvent _quitEvent = new ManualResetEvent(false); static void Main() { Console.CancelKeyPress += (sender, eArgs) => { _quitEvent.Set(); eArgs.Cancel = true; }; // kick off asynchronous stuff _quitEvent.WaitOne(); // cleanup/shutdown and quit } 或者,使用Thread.Sleep(1): static bool _quitFlag = false; static void Main() { Console.CancelKeyPress += delegate { _quitFlag = true; }; […]

是否保证执行memcpy(0,0,0)是安全的?

我对C标准不太了解,请耐心等待。 我想知道是否可以保证memcpy(0,0,0)是安全的。 唯一的限制,我可以find的是,如果内存区域重叠,那么行为是未定义的… 但是我们可以认为这里的内存区域是重叠的吗?

为什么FolderBrowserDialog对话框不滚动到选定的文件夹?

如该屏幕截图所示,所选文件夹不在视图中。 它需要向下滚动查看选定的文件夹。 相同的对话框显示在不同计算机上可见的选定文件 我跑了两台电脑都有Windows 7的。它能正常工作,但不在第二。 它看起来与Windows环境,而不是一些代码问题? 任何人都可以提出任何修复 代码没有变化。 我从不同的驱动器使用更长的path,但结果是一样的。 private void TestDialog_Click ( object sender, EventArgs e ) { //Last path store the selected path, to show the same directory as selected on next application launch. //Properties.Settings.Default.LastPath FolderBrowserDialog dlgFolder = new FolderBrowserDialog (); dlgFolder.RootFolder = Environment.SpecialFolder.DesktopDirectory; dlgFolder.SelectedPath = Properties.Settings.Default.LastPath; if (dlgFolder.ShowDialog () == System.Windows.Forms.DialogResult.OK) { […]

ConfigurationManager.AppSettings 每次都从web.config文件中读取?

我只是想知道如何ConfigurationManager.AppSettings [Key]的作品? 每次我需要一个密钥时,是否从物理文件中读取? 如果是这样,我应该读取我的web.config在caching中的所有应用程序设置,然后从中读取? 或者ASP.NET或IIS在application_startup中加载web.config文件,并且只加载一次。 如何validation每次读取是否访问物理文件? 如果我更改web.config,IIS重新启动我的应用程序,所以无法validation它的方式。 谢谢,

整数后缀J是什么意思?

我有以下来源: int main() { 000J; } 用gcc 4.8.4编译没有错误。 我知道有像L或U这样的后缀,但是我没有find关于J的任何东西。 那么它是做什么的?

C ++的dependency injection框架

是否有一个与Google Guice相媲美的DI框架? Google使用什么?

使用std :: move()是不成熟的优化吗?

假设我有以下代码: int main() { std::vector<std::string> strs; std::string var("Hello World"); // Make some modifications to 'var' strs.push_back(std::move(var)); } 我想要指出的部分是std::move()的用法。 基本上我担心push_back()调用的副本。 假设我添加的string非常大。 我仍然在学习C ++ 11中的r值引用,所以我不确定编译器如何在没有std::move()情况下优化拷贝(如果有的话std::move() 。 任何人都可以解释,如果这是一个不成熟的优化(在所有情况下,你想避免复制,一般强制移动)? 如果是这样,我应该期待编译器遵循哪种模式(或者最有可能遵循),这将导致优化和自动移动? 编辑 我想补充一点,我明白自动移动发生在函数返回值上 ,因为NRVO / RVO适用。 我在这里给出的具体例子不适用RVO,所以我不确定。