nullable-reference-types相关内容

了解新的可为空的引用类型警告

启用可为空的引用类型后,以下行将生成警告: public string ConvertToString(object value) => value.ToString(); 警告CS8603:可能返回空引用。 但我不确定为什么。参数不能为空,ToString()返回string而不是string?,那么此代码怎么可能有空引用返回? 推荐答案 根据MSDNObject.T ..
发布时间:2022-05-25 16:08:34 C#/.NET

如何使用 .NET 反射检查可空引用类型

C# 8.0 引入了可为空的引用类型.这是一个具有可为空属性的简单类: 公共类 Foo{公共字符串?酒吧{得到;放;}} 有没有办法通过反射检查类属性是否使用可为空的引用类型? 解决方案 这似乎有效,至少在我测试过的类型上如此. public static bool IsNullable(PropertyInfo property) =>IsNullableHelper(proper ..
发布时间:2021-12-26 14:10:36 C#/.NET

具有泛型返回类型的可空引用类型

我正在尝试使用新的 C# 8 可空引用类型功能,在重构我的代码时,我发现了这个(简化的)方法: public T Get(字符串键){var wrapper = cacheService.Get(key);返回 wrapper.HasValue ?反序列化(包装器):默认;} 现在,这是一个警告 可能的空引用返回 这是合乎逻辑的,因为 default(T) 将为所有引用类型提供 n ..
发布时间:2021-12-15 09:49:34 C#/.NET

外部函数作为可空保护的可能性吗?

C# 8 引入了可为空引用类型,这是一个非常酷的特性.现在,如果您希望获得可为空的值,则必须编写所谓的守卫: 对象?值 = 空;如果(值为空){抛出新的 ArgumentNullException();}… 这些可能有点重复.我想知道的是是否有可能避免为每个变量编写这种类型的代码,而是有一个保护类型的 static void 函数,如果值为 null 则抛出异常> 或仅在值不为 null 时返 ..
发布时间:2021-11-26 12:51:30 C#/.NET

返回类型为“字符串"的函数返回一个可为空的字符串(即“字符串?")

对于 Azure Functions 项目,我使用的是启用了可为空引用类型的 C# 8.由于 AzureFunctions AppSettings 通过环境变量公开,环境变量可以是字符串或空值(即它们返回 string?),我尝试封装获取环境变量的逻辑 - 如果它们是,则抛出错误未设置 - 进入单独的方法 GetEnvVariable. 如您所见,GetEnvVariable 在三个短行中实 ..
发布时间:2021-11-24 18:58:02 C#/.NET

如何在 Entity Framework Core 模型中使用 C# 8.0 可空引用类型?

我正在 .NET Core 3.0 项目上启用 C# 8.0 可空引用类型.项目使用Entity Framework Core 3.0访问数据库. 以下是 Title 不能为空的数据模型. 公共类车辆{公共 int Id { 获取;私人订制;}公共字符串标题{获取;私人订制;}//Entity Framework Core 被指示绑定到配置构建器中的私有 _drivers 字段私有只读列表 ..

在 C# 8.0 中反序列化对象时处理临时空引用类型?

我正在试用 C# 8.0,我想为整个项目启用空引用检查.我希望我可以改进我的代码设计,并且不会在任何代码范围内禁用可空性上下文. 我在反序列化对象图时遇到了问题.对象之间相互引用,但对于最终用户视图,对象图中的所有引用必须有一个值. 换句话说,在反序列化过程中,引用可能为null,但是在所有对象加载完成后,最终过程会将所有对象链接在一起,从而解析那些 null 引用. 解决方法 ..
发布时间:2021-11-24 13:15:27 C#/.NET

外部函数作为可空保护的可能性吗?

C# 8 引入了可为空引用类型,这是一个非常酷的特性.现在,如果您希望获得可为空的值,则必须编写所谓的守卫: 对象?值 = 空;如果(值为空){抛出新的 ArgumentNullException();}… 这些可能有点重复.我想知道的是是否有可能避免为每个变量编写这种类型的代码,而是有一个保护类型的 static void 函数,如果值为 null 则抛出异常> 或仅在值不为 null 时返 ..
发布时间:2021-11-24 12:36:57 C#/.NET

如何在 Entity Framework Core 模型中使用 C# 8.0 可空引用类型?

我正在 .NET Core 3.0 项目上启用 C# 8.0 可空引用类型.项目使用Entity Framework Core 3.0访问数据库. 以下是一个数据模型,其 Title 不应为空. 公共类车辆{公共 int Id { 获取;私人订制;}公共字符串标题{获取;私人订制;}//Entity Framework Core 被指示绑定到配置构建器中的私有 _drivers 字段私有只 ..

在 C# 8.0 中反序列化对象时处理临时空引用类型?

我正在试用 C# 8.0,我想为整个项目启用空引用检查.我希望我可以改进我的代码设计,并且不会在任何代码范围内禁用可空性上下文. 我在反序列化对象图时遇到了问题.对象相互之间有引用,但对于最终用户视图,对象图中的所有引用必须有一个值. 换句话说,在反序列化过程中,引用可能为null,但是在所有对象加载完成后,最终过程会将所有对象链接在一起,从而解析那些 null 引用. 解决方法 ..
发布时间:2021-10-26 15:55:14 C#/.NET

当空引用似乎不可能时,为什么我们会收到可能取消引用空引用警告?

在 HNQ 上阅读了这个问题后,我继续阅读了关于 C# 8 中的可空引用类型,并做了一些实验. 我非常清楚,当有人说“我发现了一个编译器错误!"时,10 次中有 9 次,甚至更频繁.这其实是有意为之,也是自己的误会.而且由于我今天才开始研究这个功能,很明显我对它不是很了解.有了这个,让我们看看这段代码: #nullable enable课程计划{静态无效主(){var s = "";var ..
发布时间:2021-07-10 19:30:13 C#/.NET

ASP.NET Core 中的位置记录属性

感谢审阅者找到重复项:How记录类的目标属性? 和 .NET 5.0 WebAPI 不适用于具有所需属性的记录 也是相关的. 我试图理解为什么 3. 位置记录属性在下面不起作用. 这是一个新的 ASP.NET Core Razor Pages Web 应用程序,源代码在此处 https://github.com/djhmateer/记录测试 https://daveabro ..
发布时间:2021-07-05 18:57:33 C#/.NET

在C#8中,为什么对新表达式进行类型推断会导致可为空的引用?

如果我有C#8代码: Foo类{} 后来: #nullable启用var bar = new Foo(); 然后, bar 的类型为 Foo?.这似乎很不正确,因为 new 表达式不能返回 null .为什么 bar 是可为空的引用?我什至查找了.进行了讨论以允许 var?表示“该类型的可为空版本",但是存在一些问题.常规的 var 是否会被限制为只能推断出不可为空的类型? ..
发布时间:2021-04-18 19:46:27 C#/.NET

返回类型为“字符串"的函数将返回可为空的字符串(即“字符串?")

对于Azure Functions项目,我正在使用具有启用的可空引用类型的C#8.由于使用AzureFunctions AppSettings是通过环境变量公开的,环境变量可以是字符串或null(即它们返回 string?),因此我试图封装获取环境变量的逻辑-如果它们是未设置-设置为单独的方法 GetEnvVariable . 如您所见, GetEnvVariable 通过三行简短的代码实现 ..
发布时间:2021-04-14 18:32:52 C#/.NET

将C#8.0可为空的引用类型与反序列化一起使用时的最佳实践?

我正在尝试C#8.0,并且我想为整个项目启用空引用检查.我希望可以改善我的代码设计,而又不会在任何代码范围内禁用可空性上下文. 反序列化对象图时遇到问题.这些对象之间具有相互引用,但是对于最终用户视图,对象图中必须中的所有引用都必须具有值. 换句话说,在反序列化期间,引用可能为 null ,但是在所有对象完成加载之后,最终过程会将所有对象链接在一起,从而解决了 null 引用. ..
发布时间:2021-04-02 18:33:37 C#/.NET

为什么Visual Studio将新创建的数组键入为Nullable?

我正在编写具有通用类型TVal的函数.我写了这一行: var zeroBased = new TVal[size]; 然后在Visual Studio(VS)中,我使用alt + enter将var替换为显式类型.这是我得到的: TVal[]? zeroBased = new TVal[size]; 我很惊讶地发现?运算符,指示该类型可能为空.我认为使用new创建该类型时永远不 ..
发布时间:2020-07-26 22:50:16 C#/.NET

什么课? (带问号的类)是指C#泛型类型约束?

当我试图找到另一个问题的答案时,我注意到该代码是在C#中编译的: public void Foo(T obj) where T : class? { } 我没有设法在文档中找到它的含义. 解决方案 它强制T必须是可为空的引用类型. 您为T设置的类型必须源自object?. 这是C#8中的一项新功能,可以将类型明确声明为可为空. 如果有 Add ..
发布时间:2020-07-01 22:31:27 C#/.NET

使用Linq的Where/Select过滤掉null并将类型转换为非null不能被用作扩展方法

假设我有 List list = ...; 我想将其转换为List,但是我无法删除可为空的引用. 下面是MCVE.在我的项目中,我将可为空的参考警告转为错误,因此下面的注释行将无法编译. 如果我执行.Where(e => e != null).Select(e => e!),那么在最新的.NET Core 3.1.100中就可以了,但 ..
发布时间:2020-07-01 22:31:25 C#/.NET