Questions tagged «c#-8.0»

有关与使用C#语言8.0版进行开发有关的问题。此版本添加了可为空的引用类型,默认接口方法,异步枚举以及其他功能和增强功能

1
未从FirstOrDefault公开的可空引用类型信息
我想测试C#8.0中新的可为空的引用类型功能。 我启动了一个针对.NET Core 3.0的新项目,在.csproj文件中启用了可为空的引用类型,并开始编码。我创建了一个简单的列表,该列表采用a string[]并string在等于的数组中返回abc。现在,由于不确定abc该数组中是否实际存在,因此我使用FirstOrDefault(),null如果未找到匹配项,则默认为。 using System; using System.Linq; public string FindArgument(string[] args) { var arg = args.FirstOrDefault(x => x == "abc"); return arg; } 我的方法的返回值string,这应该现在是非空的类型。由于FirstOrDefault()可能会返回null,因此我希望上述方法在返回may null arg变量时会产生警告。它不是。 查看FirstOrDefault()Visual Studio中的签名,很清楚为什么:该方法返回一个string,而不是string?我期望的可为空的等效项。 使用下面的方法主体确实会产生我期望的警告: var arg = args.Contains("abc") ? "abc" : null; return arg; System.Linq在面向.NET Core 3.0时,系统库(在此示例中)是否真的不公开可空性信息?

1
如何调用默认方法而不是具体实现
为什么在C#8中更改了默认接口方法的行为?过去,以下代码(当未发布默认接口方法的演示时): interface IDefaultInterfaceMethod { // By default, this method will be virtual, and the virtual keyword can be here used! virtual void DefaultMethod() { Console.WriteLine("I am a default method in the interface!"); } } interface IOverrideDefaultInterfaceMethod : IDefaultInterfaceMethod { void IDefaultInterfaceMethod.DefaultMethod() { Console.WriteLine("I am an overridden default method!"); } } …

2
当似乎无法实现空引用时,为什么会收到可能的空引用空引用警告?
阅读了有关HNQ的问题之后,我继续阅读了有关C#8中的Nullable引用类型的信息,并进行了一些实验。 我非常清楚,有人说“我发现了编译器错误!”,十分之九,甚至更多。这实际上是设计使然,并对自己产生误解。而且,因为我直到今天才开始研究此功能,所以显然我对它没有很好的了解。这样处理后,让我们看下面的代码: #nullable enable class Program { static void Main() { var s = ""; var b = s == null; // If you comment this line out, the warning on the line below disappears var i = s.Length; // warning CS8602: Dereference of a possibly null reference } } …

3
将DTO类与ORM一起使用时,C#8中的可空引用类型
我在具有数据传输对象(DTO)类的项目中激活了此功能,如下所示: public class Connection { public string ServiceUrl { get; set; } public string? UserName { get; set; } public string? Password { get; set; } //... others } 但是我得到了错误: CS8618:不可空的属性'ServiceUrl'未初始化。考虑将属性声明为可为空。 这是DTO类,因此我没有初始化属性。这是初始化类以确保属性为非null的代码的职责。 例如,呼叫者可以执行以下操作: var connection = new Connection { ServiceUrl=some_value, //... } 我的问题:启用C#8的可空性上下文后,如何处理DTO类中的此类错误?

2
C#不能使`notnull`类型为可空
我正在尝试创建类似于Rust Result或Haskell的类型Either并且我已经了这一点: public struct Result<TResult, TError> where TResult : notnull where TError : notnull { private readonly OneOf<TResult, TError> Value; public Result(TResult result) => Value = result; public Result(TError error) => Value = error; public static implicit operator Result<TResult, TError>(TResult result) => new Result<TResult, TError>(result); public static implicit operator Result<TResult, …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.