Tag:

在C#/。NET中将参数标记为不可空?

是否有一个简单的属性或数据约定,我可以分配给一个函数参数,防止null在C#/。NET中传递? 理想情况下,这也将在编译时检查,以确保文字null没有被用在任何地方,并在运行时抛出ArgumentNullException 。 目前我写了类似… if (null == arg) throw new ArgumentNullException("arg"); …对于每一个我希望不为null论证。 在同样的说明中,是否存在Nullable<>的反义词,从而导致以下失败: NonNullable<string> s = null; // throw some kind of exception

使用MySQL检查空字段

我写了一个查询来检查有特定标准的用户,一个是他们有一个电子邮件地址。 我们的网站将允许用户有或没有电子邮件地址。 $aUsers=$this->readToArray(' SELECT `userID` FROM `users` WHERE `userID` IN(SELECT `userID` FROM `users_indvSettings` WHERE `indvSettingID`=5 AND `optionID`='.$time.') AND `email`!="" '); 这是检查SQL中的空字段的最好方法吗? 我刚刚尝试过“不是空”,这仍然返回一个用户logging没有他们有一个电子邮件地址。 上面的查询工作,但出于好奇,我想知道如果我正确的做法。

如何在基于块的API方法中使用非空和可为空的Objective-C关键字

考虑下面的方法 – (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler; 使用新的nonnull和nullable 注释关键字,我们可以如下丰富它: – (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler; 但是我们也得到这个警告: 指针缺less可空性types说明符(__nonnull或__nullable) 它是指第三个参数(方块一)。 该文档没有包含示例如何指定块参数的可空性。 它逐字叙述 只要types是一个简单的对象或块指针,就可以在打开的括号之后立即使用非下划线的forms为空或非空。 我试图把这两个关键字中的一个(在任何位置)没有任何运气。 还尝试了下划线前缀变体( __nonnull和__nullable )。 因此我的问题是:如何指定块参数的可空性语义?

为什么当= ==返回空值为真时,> =返回false?

我有两个inttypes的variables? (或者Nullable <int>,如果你愿意的话)。 我想对两个variables进行大于或等于(> =)的比较,但事实certificate,如果两个variables均为空,则返回false,而显然==运算符返回true。 有人可以向我解释为什么这是合乎逻辑的,因为> =运算符的语义定义包含单词“或”?

标准使用'Z'而不是NULL来表示缺失的数据?

在是否应该使用NULL的参数之外:我负责使用NULL表示“丢失或从未input”数据的现有数据库。 它与空string不同,意思是“用户设置了这个值,而且他们select了”空“。 项目的另外一个承包商坚定地坚持“不存在NULL,我从来不使用NULL,也不应该使用NULL”。 然而,让我感到困惑的是,由于承包商的团队确认了“缺less/从不进入”和“有意清空或由用户指示为未知”之间的区别,他们在其代码和存储过程中使用单个字符“Z”在整个数据库的其余部分表示“丢失/从不进入”,其含义与NULL相同。 尽pipe我们的共享客户已经要求改变这一点,而且我也支持这个请求,但是团队认为这是DBA中比我更先进的“标准实践”。 他们不愿意单独根据我的无知请求更改为使用NULL。 那么,谁能帮我克服我的无知? SQL专家中是否有任何标准或一小组个人,甚至是一个大声的提倡使用“Z”代替NULL的声音? 更新 我有一个承包商的回应补充。 以下是当客户要求删除特殊值以允许在没有数据的列中允许NULL时他所说的内容: 基本上,我devise的数据库,以尽可能避免NULL。 这是理由: • string[VARCHAR]字段中的NULL是不必要的,因为空(零长度)string提供完全相同的信息。 • 整数字段(例如,ID值)中的NULL可以通过使用永远不会出现在数据中的值来处理(例如,对于整数IDENTITY字段,则为-1)。 date字段中的NULL可能很容易造成date计算的复杂性。 例如,在计算date差异的逻辑(如[RecoveryDate]和[OnsetDate]之间的天数差异)中,如果一个或两个date都为NULL,则逻辑将爆炸 – 除非为两个date为NULL。 这是额外的工作和额外的处理。 如果[RecoveryDate]和[OnsetDate](例如“1/1/1900”)使用“default”或“placeholder”date,math计算可能会显示“exception”值 – 但date逻辑不会被炸毁。 传统上,NULL处理是开发人员在存储过程中犯错的区域。 在我作为DBA的15年中,我发现尽可能避免NULL。 这似乎validation了对这个问题的主要负面反应。 而不是应用可接受的6NF方法来deviseNULL,特殊值用于“尽可能避免NULL”。 我以开放的态度发表了这个问题,很高兴我对“NULL是有用的/ NULL是邪恶的”辩论有了更多的了解,但是现在我很舒服地将“特殊值”方法标记为完全无稽之谈。 一个空的(零长度)string提供完全相同的信息。 不,它不; 在我们正在修改的现有数据库中,NULL表示“从不input”,空string表示“input为空”。 传统上,NULL处理是开发人员在存储过程中犯错的区域。 是的,但成千上万的开发人员已经犯了数千次错误,而避免这些错误的经验教训和注意事项是已知的并且是有logging的。 正如这里所提到的那样:无论你接受还是拒绝NULL,缺失值的表示都是一个解决的问题 。 没有必要发明一种新的解决scheme,因为开发人员继续制造易于克服(易于识别)的错误。 作为一个脚注:我已经是DBE和开发人员20多年了(这当然有足够的时间让我知道数据库工程师和数据库pipe理员之间的差异)。 在我整个职业生涯中,我一直都是在“有用”的阵营,虽然我知道有几个非常聪明的人不同意。 我对“特殊价值”方法持怀疑态度,但对于“如何避免以正确方法行事”这一学者坚持不懈,坚持不懈。 我总是喜欢学习新东西,20年后我仍然有很多东西要学。 感谢所有为此作出贡献的人士提供有用的讨论。

如果任何字段包含NULL,MySQL CONCAT将返回NULL

我有我的表“设备”中的以下数据: affiliate_name affiliate_location model ip os_type os_version cs1 inter Dell 10.125.103.25 Linux Fedora cs2 inter Dell 10.125.103.26 Linux Fedora cs3 inter Dell 10.125.103.27 NULL NULL cs4 inter Dell 10.125.103.28 NULL NULL 我执行下面的查询 SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices 它返回下面给出的结果 cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL) 如何走出这个,所以它应该忽略NULL和结果应该是 cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora cs3-Dell-10.125.103.27- cs4-Dell-10.125.103.28-

在条件expression式中检查可为空的bool的最佳方法(如果…)

我想知道什么是对可空布尔进行条件检查的最干净和可以理解的语法。 以下是好的还是坏的编码风格? 有没有办法更好地/更干净地expression条件? bool? nullableBool = true; if (nullableBool ?? false) { … } else { … } 尤其是if(nullableBool false)部分。 我不喜欢if (x.HasValue && x.Value)风格… (不知道这个问题之前是否被问过…找不到与search类似的东西)

是可空types的引用types?

当我声明一个int可为空 int? i=null; i在这里成为一个参考types?

null + true是一个string?

因为true不是一个stringtypes, null + true是一个string? string s = true; //Cannot implicitly convert type 'bool' to 'string' bool b = null + true; //Cannot implicitly convert type 'string' to 'bool' 这背后的原因是什么?

独特的方式来使用空合并运算符

我知道在C#中使用Null合并运算符的标准方法是设置默认值。 string nobody = null; string somebody = "Bob Saget"; string anybody = ""; anybody = nobody ?? "Mr. T"; // returns Mr. T anybody = somebody ?? "Mr. T"; // returns "Bob Saget" 但还有什么可以?? 用于? 它看起来不像三元运算符那样有用,除了比以下更简洁和更易读: nobody = null; anybody = nobody == null ? "Bob Saget" : nobody; // returns Bob Saget 所以,即使知道更less的空合并操作符… […]