问题标签 [non-nullable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
482 浏览

design-by-contract - 不可为空的对象有什么问题?

我最近一直在研究 DbC 和 Spec#,它们似乎支持不可为空的对象。不幸的是,Spec# 似乎已被放弃。

  1. Spec# 似乎内置了很多不错的语言特性,为什么它被放弃了?
  2. 默认情况下让所有对象都不可为空会有什么问题,所以你必须写 int?, string?甚至MailMessage?如果你真的想要一个可为空的对象?
  3. 我在这里看到了一种 Sql 类比,您可以将类属性检查为可空或不可空。您甚至可以像使用 sql 表列那样对属性施加约束吗?

我没有看到将此类功能内置到语言中的问题。有人可以启发我吗?

0 投票
3 回答
1016 浏览

c# - How can I run a query on a dataset that returns different columns to the table?

I'm trying to pull some data from a SQL table in my dataset using C#.

In this case I do not need all the columns just a few specific ones, however as I am not pulling back a column with a mandatory NOT NULL, the copy of the table is throwing the exception

I'm sure I can work around this by returning the unNullable column to my table however I want to avoid returning unnecessary data.

The query I am using which throws this exception is

This excludes the mandatory column "tblLocationID". In reality though, this column is only mandatory when considering the database as a whole, not when I just need build and software detail for use in my form.

I am trying to use this query in the following manner.

I notice when browsing the preview data, Visual Studio draws columns that are not specified in my SQL including the column tblLocationID it does not however populate these columns with data.

Is there anyway I can use this data in a temporary table without importing the non-nullable aspect of the column? preferably by not pulling through the non-selected columns at all?






For completeness, here's the definition (- minus foreign key definitions) of the source table:

0 投票
7 回答
57039 浏览

c# - 使不可为空的值类型可以为空

我有一个使用有限的简单结构。该结构是在从数据库调用数据的方法中创建的。如果没有从数据库返回的数据,我希望能够返回 null,但 Visual Studio 抱怨,无法将 null 转换为 PackageName.StructName,因为它是不可为 null 的值类型。

我怎样才能使它可以为空?

0 投票
7 回答
1885 浏览

null - 关于不可为空类型的争论

我不断听到人们谈论不可为空的引用类型如何解决如此多的错误并使编程变得如此容易。甚至 null 的创建者也称其为十亿美元的错误,并且Spec#引入了不可为 null 的类型来解决这个问题。

编辑:忽略我对 Spec# 的评论。我误解了它是如何工作的。

编辑2:我一定是在和错误的人说话,我真的希望有人与之争论:-)


所以我猜,作为少数派,我错了,但我不明白为什么这场辩论有任何价值。我认为 null 是一种查找错误的工具。考虑以下:

砰!访问冲突。有人忘记初始化了c


现在考虑一下:

哎呀。循环被静默地跳过。可能需要一段时间才能找到问题所在。


如果你的类是空的,那么代码无论如何都会失败。为什么不让系统告诉你(尽管有点粗鲁),而不必自己弄清楚呢?

0 投票
6 回答
28913 浏览

c# - 为什么 C# 中的 DateTime 不允许为 null?

为什么在 C# 中不允许将 null 分配给 DateTime?这是如何实施的?并且可以使用此功能使您自己的类不可为空吗?

例子:

我知道我可以DateTime?在 C# 2.0 中使用以允许将 null 分配给 dateTimeTest,并且我可以在我的字符串上使用Jon Skeet 的 NonNullable 类来获取 stringTest 分配的运行时错误。我只是想知道为什么这两种类型的行为不同。

0 投票
7 回答
3350 浏览

language-design - 不可为空的引用类型

我正在设计一种语言,我想知道默认情况下使引用类型不可为空并使用“?”是否合理。对于可空值和引用类型。这有什么问题吗?你会怎么做:

0 投票
6 回答
4252 浏览

c# - C# 中可空类型的替代方案

我正在编写适用于一系列数字数据的算法,有时,该系列中的一个值需要为空。但是,由于此应用程序对性能至关重要,因此我避免使用可空类型。我已经对算法进行了性能测试,专门比较了使用可空类型和不可空类型的性能,在最好的情况下,可空类型会慢 2 倍,但通常要差得多。

最常用的数据类型是 double,目前选择的 null 替代方案是 double.NaN。但是我知道这不是 NaN 值的确切预期用途,所以我不确定这是否有任何我无法预见的问题以及最佳实践是什么。

我有兴趣找出以下数据类型的最佳空替代方案:double/float、decimal、DateTime、int/long(尽管其他数据类型非常受欢迎)

编辑:我想我需要澄清我对性能的要求。通过这些算法一次处理大量数字数据需要几个小时。因此,尽管例如 10ms 或 20ms 之间的差异通常是微不足道的,但在这种情况下,它确实会对所用时间产生重大影响。

0 投票
2 回答
4280 浏览

sql-server-2005 - 如何使计算列不可为空?

到目前为止,我一直在使用ISNULL(dbo.fn_GetPrice(ItemId), 0)它来使它不可为空(而是称它为默认值,但无论如何)。

这是正确的方法吗?

0 投票
2 回答
1340 浏览

c# - 今天如何在 C# 中接近不可为空的引用类型?

我已经阅读了许多不可为空的问题和答案。看起来在 C# (4.0) 中接近不可为空类型的最佳方法是 Jon Skeet 的NonNullable<> hack。

但是,似乎 C++/CLI 通过支持托管引用解决了大部分问题:(Foo%而不是原生 C++ Foo&)。编译器通过添加modreq(IsImplicitlyDereferenced)参数来完成这项工作。尝试从 C# 调用这样的函数会导致:

还有什么比NonNullable<>更好的吗?

有没有办法(合理地——即,不使用反射)从 C# 调用 C++/CLI 方法Foo::Method(Bar%)


[编辑]目前似乎没有什么比NonNullable<>更好的了……我希望我能得到一些关于 C++/CLI 的评论,因为它至少已经有了部分解决方案。

0 投票
6 回答
5986 浏览

c# - 未分配的不可为空变量的值 (C#)

只是好奇。

如果你走的话:

它的值为空。

但如果你去:

这个变量在 C# 中的值是多少?

谢谢

大卫