Tag: C#的

将枚举转换为另一种types的枚举

我有一个例如“ Gender ”( Male =0 , Female =1 )的枚举,我有另一个服务,它有自己的性别枚举( Male =0 , Female =1, Unknown =2 ) 我的问题是,我怎么能写一些快速的,很好的从他们的枚举转换为我的?

在Objective-C中声明和检查/比较(bitmask-)枚举

你知道在cocoa有这个东西,例如你可以创build一个UIView并做: view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 我有一个自定义的UIView与多个状态,我已经在这样的enum定义: enum DownloadViewStatus { FileNotDownloaded, FileDownloading, FileDownloaded }; 对于每个创build的子视图,我设置它的tag : subview1.tag = FileNotDownloaded; 然后,我有一个自定义setter的视图状态,它执行以下操作: for (UIView *subview in self.subviews) { if (subview.tag == viewStatus) subview.hidden = NO; else subview.hidden = YES; } 但是我想要做的是让这个: subview1.tag = FileNotDownloaded | FileDownloaded; 所以我的subview1出现在我的观点的两个状态。 目前,它并没有出现在这两个州以来的任何一个州 运算符似乎添加了两个枚举值。 有没有办法做到这一点?

为什么不在C ++中使用指针?

假设我定义了一些类: class Pixel { public: Pixel(){ x=0; y=0;}; int x; int y; } 然后使用它编写一些代码。 我为什么要做下面的事情? Pixel p; px = 2; py = 5; 来自Java世界,我总是写: Pixel* p = new Pixel(); p->x = 2; p->y = 5; 他们基本上做同样的事情,对吧? 一个在栈上,另一个在堆上,所以我将不得不删除它。 两者有什么根本的区别? 为什么我应该比另一个更喜欢?

C99中最有用的新function是什么?

C99已经有十多年了,但是对它的支持一直很慢,所以大多数开发者都坚持使用C89。 即使在今天,当我遇到C代码中的C99特性时,我也有些惊讶。 现在大多数主要的编译器都支持C99(MSVC是一个明显的例外,而且一些embedded式编译器也落后了),我觉得和C一起工作的开发人员应该知道C99可用的function。 其中一些特性是从未标准化过的常用特性(例如snprintf ),或者从C ++(灵活的variables声明放置或单行//注释)中熟悉,但是一些新特性首先在C99和许多程序员都不熟悉。 你觉得C99中最有用的新function是什么? 作为参考, C99标准 (标记为草稿,但与更新的标准相同,据我所知), 新function列表和GCC C99实施状态 。 每个答案的一个function,请; 随时留下多个答案。 鼓励演示新function的简短代码示例。

为什么我不能在lambdaexpression式中使用空传播操作符?

我经常在我的代码中使用空传播操作符,因为它给了我更多的可读代码,特别是在长查询中,我不必对每个使用的类都进行空检查。 下面的代码抛出一个编译错误,我们不能在lambda中使用null传播运算符。 var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000); 错误 : 错误CS8072expression式树lambda可能不包含空传播运算符。 C#可以很容易地将上面的代码翻译成下面的代码,如果真的不能做任何事情! var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000); 我很好奇,为什么C#什么都不做,只是抛出一个编译器错误?

为什么IList不支持AddRange

List.AddRange()存在,但IList.AddRange()不存在。 这让我觉得很奇怪。 这背后的原因是什么?

在C ++ 0x中缩小转换。 这只是我,还是这听起来像一个突变?

C ++ 0x将使下面的代码和类似的代码格式不正确,因为它需要一个所谓的缩小到double 转换 。 int a[] = { 1.0 }; 我想知道这种初始化在现实世界的代码中是否用得很多。 有多less代码会被这个改变打破? 如果您的代码受到影响,是否需要在代码中解决这个问题? 作为参考,参见n3225的8.5.4 / 6 缩小转换是一种隐式转换 从浮点型到整型,或者 从long double到double或float,或者从double到float,除非源是常量expression式,并且转换后的实际值在可以表示的值的范围内(即使不能精确表示),或者 从整数types或非范围枚举types转换为浮点types,除非源代码是常量expression式,并且转换后的实际值适合目标types,并在转换回原始types时生成原始值,或者 从整数types或非范围枚举types转换为不能表示原始types的所有值的整数types,除非源代码是常量expression式,并且转换后的实际值将适合目标types,并将在产生原始值时转换回原来的types。

隐藏C ++敏感string的技巧

我需要在我的C ++应用程序中存储敏感信息(我想保密的对称encryption密钥)。 简单的方法是做到这一点: std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess"; 但是,通过strings进程(或从二进制应用程序提取string的任何其他应用程序)运行应用程序将显示上述string。 应该使用什么技术来掩盖这种敏感数据? 编辑: 好吧,几乎所有人都说“你的可执行文件可以被反向devise” – 当然! 这是我的宠物,所以我要在这里咆哮一下: 为什么99%(好吧,也许我夸大了一点)这个网站上的所有与安全相关的问题都是用“没有办法创build一个完全安全的程序”的洪stream来回答的 – 这不是一个有用的回答! 安全性是一种完美的可用性和无安全性之间的滑动规模,完美的安全性,但另一方面没有可用性。 重点在于你根据自己想要做的事情以及软件运行的环境来select你的职位。 我不是在写军事装置的应用程序,而是在为家用电脑编写应用程序 。 我需要使用预先已知的encryption密钥对不可信networking上的数据进行encryption。 在这些情况下,“通过默默无闻的安全”可能已经足够了! 当然,有足够的时间,精力和技能的人可以对二进制文件进行逆向工程并find密码,但猜猜看是什么? 我不在乎: 实施一stream的安全系统需要花费的时间比由于破解版本造成的销售损失要贵(不是说我实际上是在出售这个,但是你明白了我的观点)。 这个蓝天“让绝对的最好的方式可能”在新程序员的编程趋势是愚蠢的,至less可以说。 感谢您花时间回答这个问题 – 他们是最有帮助的。 不幸的是,我只能接受一个答案,但我已经投了所有有用的答案。

在.cpp文件中定义C ++名称空间方法的正确方法

可能是重复的,但不是一个容易的search… 给定一个头像: namespace ns1 { class MyClass { void method(); }; } 我看到.cpp文件中以几种方式定义了method() : 版本1: namespace ns1 { void MyClass::method() { … } } 版本2: using namespace ns1; void MyClass::method() { … } 版本3: void ns1::MyClass::method() { … } 有没有一个“正确”的方法来做到这一点? 这些“错误”中的任何一个都不意味着同一件事情?

使用语句和等待关键字在c#中很好地发挥

我有一个情况,我正在进行一个方法返回和IDisposable实例的async调用。 例如: HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")); 现在async在现场之前,在使用IDisposable实例时,使用“响应”variables的这个调用和代码将被包装在using语句中。 我的问题是,当async关键字被混入时,这是否仍然是正确的方法? 即使代码编译,在下面的例子中,using语句是否仍然按照预期工作? 例1 using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"))) { // Do something with the response return true; } 例2 using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"))) { await this.responseLogger.LogResponseAsync(response); return true; }