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

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

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

  1. public class Play
  2. {
  3. public string Name { get; set; }
  4. public Play()
  5. {
  6. }

警告如下:

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

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

  1. public class Play
  2. {
  3. public string? Name { get; set; }
  4. public Play()
  5. {
  6. }
  7. }

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

  1. public class Play
  2. {
  3. public string Name { get; set; } = "";
  4. public Play()
  5. {
  6. }
  7. }

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


  1. public class GameSocialDbContext : DbContext
  2. {
  3.   public DbSet<GameMessage> GameMessages { get; set; }
  4.   public DbSet<Player> Players { get; set; }
  5.   public GameSocialDbContext(DbContextOptions<GameSocialDbContext> options) : base(options)
  6.   {
  7.   }
  8. }

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

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

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

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

  1. public async Task RemoveAsync(Player player)
  2. {
  3. Players.Remove(player);
  4. }

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

如果需要返回值,比如:

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

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

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

CS8602 解引用可能出现空引用

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

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

可以改为强制转换:

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

也可以使用!操作符:

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

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

CS8603 可能返回null引用

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

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

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

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

或者允许返回值为空:

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

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

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. Git初始化常用方法

    准备工作 安装git sudo apt install git 创建一个ssh密钥 如果已经有ssh密钥了,则这一步不要执行 ssh-keygen -t rsa -C '账号' 复制公钥内容 gedi ...

  2. Python 字典(键值对)

    Python 字典(键值对) 创建字典 特性:字典中的键不能变,而且唯一 格式:变量名={"键1":值1,"键2":值2} 函数 作用 dict() 强制转换为 ...

  3. x64 番外篇——知识铺垫

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  4. java面试--360

    1题执行以下程序后的输出结果是()public class Test {public static void main(String[] args) {StringBuffer a = new Str ...

  5. vue解除双向绑定?

    let obj = JSON.parse(JSON.stringify(this.temp1));

  6. JavaScript的访问器

    一.访问器属性: 1.Configurable:表示能否通过delete删除属性,从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性.对于直接在对象上定义的属性,这个特性的默认值为tr ...

  7. 运筹学之"概率"和"累计概率"和"谁随机数"

    概率 = 2/50 = 0.2 累计概率 = 上个概率加本次概率 案例1 概率=销量天数 / 天数 = 2 /100 = 0.02 累计概率 = 上个概率加本次概率 = 0.02 +0.03 = 0. ...

  8. Python学习--Python的了解与安装

    Python简介: Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python 由荷兰人Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 19 ...

  9. C语言函数中的3个点 ...有什么作用

    标准库提供的一些参数的数目可以有变化的函数.例如我们很熟悉的printf,它需要有一个格式串,还应根据需要为它提供任意多个"其他参数".这种函数被称作"具有变长度参数表的 ...

  10. 5_系统的可控性_Controllability