你觉得下面的C#代码是可读的吗? private bool CanExecuteAdd(string parameter) { return this.Script == null ? false : parameter == "Step" ? true : parameter == "Element" ? this.ElementSelectedInLibrary != null && this.SelectedStep != null : parameter == "Choice" ? this.SelectedElement != null : parameter == "Jump" ? this.SelectedStep != null : parameter == "Conditional jump" ? false : false.Throw("Unknown […]
我最近发现我们可以使用?? 操作员检查空值。 请检查下面的代码示例: var res = data ?? new data(); 这与之类似 var res = (data==null) ? new data() : data ; 我检查了我的整个项目源代码库和一些其他的开源项目。 而这?? 操作员从未使用过。 我只是想知道这背后有什么理由,比如性能问题还是什么的? 编辑: 我只是根据recursion和Anton的意见更新了示例代码。 这是一个粗心的错误。 🙁
在Android开源的qemu代码中,我跑过了这行代码: machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */ 这只是一个混乱的说法: if (machine->max_cpus) { ; //do nothing } else { machine->max_cpus = 1; } 如果是这样,是不是更清楚: if (machine->max_cpus == 0) machine->max_cpus = 1; 有趣的是,这个编译和工作正常与gcc,但不编译http://www.comeaucomputing.com/tryitout/ 。
什么? 和:运营商在PHP? 例如: (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)
我遇到了别人写的代码。 推荐使用还是常用的条件操作符的用法? 我觉得这是不可维护的 – 或者只是我? 有没有其他的方式来写这个? exp_rsp_status = req.security_violation ? (dis_prot_viol_rsp && is_mstr) ? uvc_pkg::MRSP_OKAY : uvc_pkg::MRSP_PROTVIOL : req.slv_req.size() ? ((is_mst_abort_rsp && dis_mst_abort_rsp) || ((req.slv_req[0].get_rsp_status()==uvc_pkg::MRSP_PROTVIOL) && dis_prot_viol_rsp) || (is_mst_abort_rsp && req.is_pci_config_req() && dis_pcicfg_mst_abort_rsp)) ? uvc_pkg::MRSP_OKAY : req.slv_req[0].get_rsp_status() : uvc_pkg::MRSP_OKAY;
我有这个C#2.0源代码的提取: object valueFromDatabase; decimal result; valueFromDatabase = DBNull.Value; result = (decimal)(valueFromDatabase != DBNull.Value ? valueFromDatabase : 0); result = (valueFromDatabase != DBNull.Value ? (decimal)valueFromDatabase : (decimal)0); 第一个结果评估会抛出一个InvalidCastException而第二个则不会。 这两者有什么区别?
只是为了好奇/方便:C#提供了两个很酷的条件expression式function我知道: string trimmed = (input == null) ? null : input.Trim(); 和 string trimmed = (input ?? "").Trim(); 对于我经常遇到的情况,我怀念另一个这样的expression: 如果input引用为空,则输出应该为空。 否则,输出应该是访问input对象的方法或属性的结果。 我在第一个例子中完成了,但(input == null) ? null : input.Trim() (input == null) ? null : input.Trim()是相当详细和不可读的。 是否有这种情况下的另一个条件expression式,或者我可以使用?? 操作员优雅?
下面的expression是好的 short d = ("obj" == "obj" ) ? 1 : 2; 但是当你像下面一样使用它时,会出现语法错误 short d = (DateTime.Now == DateTime.Now) ? 1 : 2; 不能将types“int”隐式转换为“short”。 存在明确的转换(您是否缺less演员?) 任何人都可以解释为什么这样吗? 为什么在三元运算符中比较string到string和date时间到date时间有什么区别? 如果你能帮助我,我将不胜感激。
在C ++中,?:操作符比if()… else语句更快吗? 他们之间有编译代码之间的任何区别?
在我正在开发的其中一个项目中,我看到了这个代码 struct Base { virtual ~Base() { } }; struct ClassX { bool isHoldingDerivedObj() const { return typeid(1 ? *m_basePtr : *m_basePtr) == typeid(Derived); } Base *m_basePtr; }; 我从来没有见过像那样使用typeid 。 为什么这么奇怪的跳舞?: ,而不是只是做typeid(*m_basePtr) ? 有什么理由吗? Base是一个多态类(具有虚拟析构函数)。 编辑:在这个代码的另一个地方,我看到这个,它似乎是等价的“多余的” template<typename T> T &nonnull(T &t) { return t; } struct ClassY { bool isHoldingDerivedObj() const { return typeid(nonnull(*m_basePtr)) == […]