c#-8.0相关内容
我在一些C#源代码中发现以下行: if(!(context.Compilation.GetTypeByMetadataName("Xunit.FactAttribute") is { } factAttribute)) 这里是另一个: if(!(diagnostic.Location.SourceTree is { } tree)) is运算符后面的花括号({
..
在C#8及更高版本中,我们有default interface methods,因此: 这不是破坏了接口的原则吗? 什么时候应该使用默认接口方法而不是基础(抽象)类? 推荐答案 为什么我们有接口? 从理论上讲,接口实现和类继承都解决了同一个问题:它们允许您在类型之间定义subtype relationship。 那么为什么我们在C#中两者都有呢?我们到底为什么需
..
启用可为空的引用类型后,以下行将生成警告: public string ConvertToString(object value) => value.ToString(); 警告CS8603:可能返回空引用。 但我不确定为什么。参数不能为空,ToString()返回string而不是string?,那么此代码怎么可能有空引用返回? 推荐答案 根据MSDNObject.T
..
我知道返回值的方法或属性匹配的 C# 8 switch 表达式 语法.但是如果我们只需要打开一个字符串值并执行一个什么都不返回的方法(没有返回类型/void),那么我们该怎么做呢?我正在考虑某种形式的 Func 但不确定确切的语法.我知道我们可以使用常规 case 语句以旧方式做到这一点,但试图看看我们是否可以使用新语法实现同样的效果. 这是问题的例子 开关(字符串值){案例“添加":添加
..
我想在 Visual Studio 2017 中使用 C# 8.0(尤其是范围和不可为空的引用类型).可以吗? 解决方案 展望未来,微软希望将 C# 语言版本与过去的框架版本更紧密地联系在一起.他们真的只希望您将 C# 8 与 .NET Core 3.x 和 .NET Standard 2.1 项目一起使用,这意味着使用 Visual Studio 2019.我对 C# 8 是否支持 .N
..
我最近编写了一些代码,其中我无意中将变量名重用为在已经具有同名变量的函数中声明的操作的参数.例如: var x = 1;动作myAction = (x) =>{ Console.WriteLine(x);}; 当我发现重复时,我惊讶地发现代码编译并完美运行,根据我对 C# 中作用域的了解,这不是我所期望的行为.一些快速的谷歌搜索出现了 SO 问题,这些问题抱怨类似的代码确实会产生错误,例如 L
..
我正在尝试使用 C# 8,一种似乎特别有用的方法是 Task.WhenAll 返回 IAsyncEnumerable.此方法应在任务结果可用时立即流式传输任务结果,因此将其命名为 WhenAll 没有多大意义.WhenEach 听起来更合适.该方法的签名是: public static IAsyncEnumerableWhenEach(Task[] 个任务); 这个方法可以这样使用: var
..
我正在尝试使用新的 C# 8 可空引用类型功能,在重构我的代码时,我发现了这个(简化的)方法: public T Get(字符串键){var wrapper = cacheService.Get(key);返回 wrapper.HasValue ?反序列化(包装器):默认;} 现在,这是一个警告 可能的空引用返回 这是合乎逻辑的,因为 default(T) 将为所有引用类型提供 n
..
我想知道是否有办法通过 Source 对象创建 IAsyncEnumerable 或 IAsyncEnumerator,而不是像 TaskCompletionSource 允许一个人为任务做.特别是,TaskCompletionSource 可以像任何其他参数一样传递. 也许是这样的: public class AsyncEnumerables {公共任务处理程序任务 { 获取;放;}公共
..
我正在使用 asp.net core 3.1 docker enabled 项目模板 (VS2019) 来开发 Web API.没有编译错误. 在运行项目时,在 VS2019 的输出窗口中,我看到以下消息: 无法在 IPv6 环回接口上绑定到 http://localhost:5000:“无法分配请求的地址".加载“/usr/share/dotnet/shared/Microsoft.NE
..
我知道抽象类是一种无法实例化的特殊类.抽象类只能被子类化(继承自).换句话说,它只允许其他类继承它,但不能实例化它.优点是它可以为所有子类强制执行某些层次结构.简单来说,它是一种契约,强制所有子类执行相同的层次结构或标准. 我也知道接口不是类.它是由“接口"一词定义的实体.接口没有实现;它只有签名,或者换句话说,只有没有主体的方法的定义.作为与 Abstract 类的相似之处之一,它是一个契
..
C# 8 引入了可为空引用类型,这是一个非常酷的特性.现在,如果您希望获得可为空的值,则必须编写所谓的守卫: 对象?值 = 空;如果(值为空){抛出新的 ArgumentNullException();}… 这些可能有点重复.我想知道的是是否有可能避免为每个变量编写这种类型的代码,而是有一个保护类型的 static void 函数,如果值为 null 则抛出异常> 或仅在值不为 null 时返
..
根据https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/default-interface-methods可以使用以下语法显式调用接口基础实现. base(IInterfaceType).Method(); 但这似乎还没有实现. 是否有解决方法(例如反射)来实现这一目
..
我知道抽象类是一种无法实例化的特殊类.抽象类只能被子类化(继承自).换句话说,它只允许其他类继承它,但不能实例化它.优点是它可以为所有子类强制执行某些层次结构.简单来说,它是一种契约,强制所有子类执行相同的层次结构或标准. 我也知道接口不是类.它是由“接口"一词定义的实体.接口没有实现;它只有签名,或者换句话说,只有没有主体的方法的定义.作为与 Abstract 类的相似之处之一,它是一个契
..
我正在 C# 8 中试验 [CallerArgumentExpression]: static void Main(string[] args){尝试{程序查询 = null;参数(查询!= null,“哎呀");}捕获(例外 e){Console.WriteLine(e.Message);}}public static void Argument(bool condition, string
..
我有以下方法可以从 http 流中读取 csv 文档 public async IAsyncEnumerableGetLines([EnumeratorCancellation] CancellationToken 取消令牌){HttpResponseMessage 响应 = GetResponse();使用 var responseStream = await response.Content
..
目前关于新的 C#8 默认接口实现(特征)的事件限制的文档很少.我特别困惑 规范提案. 不仅给出了无效的 C# 示例(“覆盖"事件缺少标识符),而且在 C#8(VS2019,.NET Core 3.0)中实现这些中的任何一个都会返回一个编译器异常的主机.此外,发行说明对于 C#8,不要提及接口特征的事件.当我继续尝试寻找答案时,我也无法从 开放问题列表. 那么问题是:这个功能是否已实现和可用
..
我正在试用 C# 8.0,我想为整个项目启用空引用检查.我希望我可以改进我的代码设计,并且不会在任何代码范围内禁用可空性上下文. 我在反序列化对象图时遇到了问题.对象之间相互引用,但对于最终用户视图,对象图中的所有引用必须有一个值. 换句话说,在反序列化过程中,引用可能为null,但是在所有对象加载完成后,最终过程会将所有对象链接在一起,从而解析那些 null 引用. 解决方法
..
C# 8 引入了可为空引用类型,这是一个非常酷的特性.现在,如果您希望获得可为空的值,则必须编写所谓的守卫: 对象?值 = 空;如果(值为空){抛出新的 ArgumentNullException();}… 这些可能有点重复.我想知道的是是否有可能避免为每个变量编写这种类型的代码,而是有一个保护类型的 static void 函数,如果值为 null 则抛出异常> 或仅在值不为 null 时返
..
根据https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/default-interface-methods可以使用以下语法显式调用接口基础实现. base(IInterfaceType).Method(); 但这似乎还没有实现. 是否有解决方法(例如反射)来实现这一目
..