在使用.Net 6开发程序时,发现多了很多新的警告类型。这里总结一下处理方法。

CS8618 在退出构造函数时,不可为 null 的 属性“Name”必须包含非 null 值

经常遇到的有CS8618警告:如果定义属性可能为空时,在编译时会报这个警告,比如下面的代码:

    public class Play
{
public string Name { get; set; } public Play()
{ }

警告如下:

CS8618 在退出构造函数时,不可为 null 的 属性“Name”必须包含非 null 值。请考虑将 属性 声明为可以为 null。

处理办法是将属性声明为可以为空:

    public class Play
{
public string? Name { get; set; } public Play()
{ }
}

或者,给属性设置初始值:

    public class Play
{
public string Name { get; set; } = ""; public Play()
{ }
}

但遇到下面的情况,这两种办法就不能用了:


public class GameSocialDbContext : DbContext
{
  public DbSet<GameMessage> GameMessages { get; set; }
  public DbSet<Player> Players { get; set; }
  public GameSocialDbContext(DbContextOptions<GameSocialDbContext> options) : base(options)
  {
  } }

这种情况下,可以将属性设置default!来避免警告:

        public DbSet<Game> Games { get; set; } = default!;
public DbSet<Player> Players { get; set; } = default!;

CS1998 此异步方法缺少await运算符

这种情况通常出现在重载或者实现某个异步方法时,没有可调用的异步函数。比如下面的方法:

        public async Task RemoveAsync(Player player)
{
Players.Remove(player);
}

这种情况下,可以在退出前增加 await Task.CompletedTask;来避免警告。

如果需要返回值,比如:

        public async Task<List<Player>> GetAllAsync()
{
return colTemp.AsQueryable<Player>().ToList();
}

这时,可以使用await Task.FromResult()作为返回值:

        public async Task<List<Player>> GetAllAsync()
{
return await Task.FromResult(colTemp.AsQueryable<Player>().ToList());
}

CS8602 解引用可能出现空引用

如果采用as进行转换,可能出现这个警告:

 await (handler as IEventHandler).HandleEvent(data);

可以改为强制转换:

 await ((IEventHandler)handler).HandleEvent(data);

也可以使用!操作符:

 await (handler as IEventHandler)!.HandleEvent(data);

还可以在调用前判断是否为空,如果为空,抛出异常。

CS8603 可能返回null引用

这种警告多出现在过滤时,比如:

        public async Task<Player> GetPlayerByNameAsync(string name)
{
return await gameDbContext.Players
.Include(p => p.SentFriendRequests)
.Include(p => p.ReceievedFriendRequests).FirstOrDefaultAsync(p => p.UserName == name);
}

由于FirstOrDefault可能返回空值,所以会出现警告。可以改为使用First:

        public async Task<Player> GetPlayerByNameAsync(string name)
{
return await gameDbContext.Players
.Include(p => p.SentFriendRequests)
.Include(p => p.ReceievedFriendRequests).FirstAsync(p => p.UserName == name);
}

或者允许返回值为空:

        public async Task<Player?> GetPlayerByNameAsync(string name)
{
return await gameDbContext.Players
.Include(p => p.SentFriendRequests)
.Include(p => p.ReceievedFriendRequests).FirstOrDefaultAsync(p => p.UserName == name);
}

最后需要说明的是,警告是为了提示程序可能的潜在问题,消除警告时,需要结合具体情况确定使用哪种方式,不要为了去掉警告忽略潜在的问题。

c# 一些警告的处理方法的更多相关文章

  1. Apple Mach-O Linker Warning 警告解决的方法

    此警告解决的方法: 项目名字 -> targets -> Build Settings -> search path 把里面无用的东西 点 减号 删掉 即可了. $(function ...

  2. Eclipse中Jsp页面警告的解决方法小结

    恩,只要是开发人员,这样的小事情总会遇到的,对于这其中的某些警告性的错误是不影响代码的运行的,对应的功能也是能实现的,不过总给人一种不太好看的感觉!如果代码写的比较符合规范,这些问题也就自然而然的消失 ...

  3. Android“This Handler class should be static or leaks might occur”警告的处理方法

    此文属于转载! 最近用到handle在线程中改变UI,会跟给出“This Handler class should be static or leaks might occur”的警告,网上看了很多解 ...

  4. 8. Unity异常警告错误处理方法

    一. The AnimationClip 'cube1_anim' used by the Animation component 'Cube1' must be marked as Legacy. ...

  5. ItunesConnect:"Missing Push Notification Entitlement"警告-----以及解决方法

    最近开发的cordova应用,要做ios的适配,并且发布版本,但是有一次在发测试版本的时候,突然收到一封邮件警告,原文如下: Missing Push Notification Entitlement ...

  6. sklearn.cross_validation 0.18版本废弃警告及解决方法

    转载:cheneyshark 机器环境: scikit-learn==0.19.1 Python 2.7.13 train_test_split基本用法 在机器学习中,我们通常将原始数据按照比例分割为 ...

  7. 执行make出现“Warning: File `xxx.c' has modification time 2.6e+04 s in the future“警告的解决方法

    错误描述: 执行make命令时出现"make[2]: Warning: File `xxx.c' has modification time 1.6e+05 s in the future ...

  8. Unity异常警告错误处理方法

    原地址:http://www.haogongju.net/art/2591936 1.  The AnimationClip 'cube1_anim' used by the Animation co ...

  9. xcode升级到6.0以后遇到的警告错误解决方法

    Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is depreca ...

  10. IOS UIAlertView(警告框)方法总结

    转自:my.oschina.net/u/2340880/blog/408873?p=1 IOS中UIAlertView(警告框)常用方法总结 一.初始化方法 - (instancetype)initW ...

随机推荐

  1. TypeScript编译tsconfig.json配置

    配置预览 { "include": ["src/**/*"], "exclude": ["ndoe_modules", ...

  2. 迷宫问题,打印所有路径,深度搜索,dfs

    #include<iostream> using namespace std; int maze [5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0 ...

  3. 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, 请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法, 参数不同时,方法能重载吗?

    Dao 接口即 Mapper 接口.接口的全限名,就是映射文件中的 namespace 的值: 接口的方法名,就是映射文件中 Mapper 的 Statement 的 id 值:接口方法内的 参数,就 ...

  4. REST 和RPC对比?

    1.RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行接口的定义,并通过持续继承发布,严格版本控制才不会出现冲突. 2.REST是轻量级的接口,服务的提供和调用不存在代码之间 ...

  5. 面试问题之C++语言:简述编译过程

    转载于:https://blog.csdn.net/ypshowm/article/details/89374706 编译过程主要分为四步: 1.词法分析(扫描) 运行类似于有限状态机的算法将源代码的 ...

  6. Java并发机制(9)--Callable、Future、FutureTask的使用

    Java并发编程:Callable.Future.FutureTask的使用 整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3949310.html ...

  7. Effective Java —— 谨慎覆盖clone

    本文参考 本篇文章参考自<Effective Java>第三版第十三条"Always override toString",在<阿里巴巴Java开发手册>中 ...

  8. (stm32学习总结)—spi基本原理

    参考:spi详解   spi协议 SPI的基本介绍 SPI的简介 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其M ...

  9. Linux文件管理 | Linux 文件基础知识

    目录 Linux 常用文件类别 Linux 目录结构概述 LInux 系统目录及说明 一.Linux 常用文件类别 1.文件   在Linux上系统上,有一切皆文件的说法,就是说任何软件和I/O设备都 ...

  10. 小程序入门系列之 tabBar

    本系列为简单入门系列,以一定概括性思路来叙述内容,具体可以查看官网 大部分的电商应用都是底部或顶部多 tab 的模式. 下面我们从配置角度来分析一下: 第一个:position 配置如下: 默认是 b ...