小编Tom*_*mer的帖子

可空引用类型和 MSTest ClassInitialize

MSTest 提供了一个[ClassInitialize]属性,可以将其放置在static方法上以提供一次性初始化。

假设我在测试类中有一个静态成员,我希望在这样的[ClassInitialize]方法中初始化它。我如何标记它不可为空?

例如,考虑以下代码:

private static Database _database;

[ClassInitialize]
public static void InitializeClass(TestContext testContext)
{
    _database = new Database();
}
Run Code Online (Sandbox Code Playgroud)

使用#nullable enable,我得到一个非常容易理解的警告:CS8618 Non-nullable field '_database' must contain a non-null value when exiting constructor. Consider declaring the field as nullable.

我可以将初始化移至构造函数(但每个测试方法都会发生这种情况)。我可以使用 null-forgiving 运算符 ( !)。是否有更好的选项来标记_database不为空?

c# mstest nullable-reference-types

11
推荐指数
1
解决办法
1024
查看次数

MaybeNull 属性在返回空引用时发出警告

作为转向 C# 8 可为空引用类型的一部分,我遇到了以下代码(简化):

public string GetIfExists(string key)
{
    dict.TryGetValue(key, out var value);

    return value;
}
Run Code Online (Sandbox Code Playgroud)

return行警告可能返回空引用,这是有道理的。所以我试图用一个[return: MaybeNull]属性来注释这个方法,但警告仍然出乎我的意料。从文档中,我了解到此属性将返回类型标记为 optional null,即使实际类型不允许。

似乎我避免警告的唯一选择是标记返回类型string?。那么有什么用[return: MaybeNull]呢?

c#-8.0 nullable-reference-types

5
推荐指数
1
解决办法
1238
查看次数

能否在不丢失检查点的情况下从 Microsoft.Azure.EventHubs 库迁移到 Azure.Messaging.EventHubs?

Azure 事件中心发布了一个现代客户端库 ( Azure.Messaging.EventHubs),用于读取和写入事件中心。新库应该取代旧库(Microsoft.Azure.EventHubs),所以我想知道当前使用旧库的现有应用程序的升级路径应该是什么。

更具体地说,切换到新库是否意味着应用程序必须丢失旧版本的检查点?虽然迁移指南清楚地解释了升级的好处以及代码示例,但我找不到任何关于数据丢失的提及。

azure azure-sdk-.net azure-eventhub

3
推荐指数
1
解决办法
810
查看次数