在使用.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. 解决Flash CS6初始化字体就自动退出

    系统win7 问题始于安装了同事的字体,启动Flash CS6时界面上显示开始初始化字体...然后 就自动退出了 尝试过进入pe系统删除字体,可是删除不了 网上搜索找到了这一个删除字体的工具FontF ...

  2. gofs使用教程-基于golang的开源跨平台文件同步工具

    概述 gofs是基于golang开发的一款开箱即用的跨平台文件同步工具,开源地址如下:https://github.com/no-src/gofs,欢迎点个Star或者提交Issue和PR,共同进步! ...

  3. 数据库连接Database link?

    在一个用户下,可以获取到另外的用户下的表的数据,通常在跨数据库时使用. create database link link93 connect to scott identified by tiger ...

  4. 转载:2017百度春季实习生五道编程题[全AC]

    装载至:https://blog.csdn.net/zmdsjtu/article/details/70880761 1[编程题]买帽子 时间限制:1秒空间限制:32768K度度熊想去商场买一顶帽子, ...

  5. 学习Tomcat(一)

    一.jdk和tomcat基础 1.web应用对比 apache: 两种方式运行php,一是用模块,二是用fastcgi nginx: 通过fastcgi处理动态请求,也可转发到tomcat 2.tom ...

  6. 使用缓存(Cache)的几种方式,回顾一下~~~

    前言 如今缓存成为了优化网站性能的首要利器,缓存使用的好,不仅能让网站性能提升,让用户体验变好,而且还能节约成本(增加一台缓存服务器可能就节约好几台机器):那平时小伙伴们都使用哪些缓存方式呢?这里就来 ...

  7. 剑指Offer30——包含min函数的栈

    剑指Offer30--包含min函数的栈 1. 题目简述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用min.push及pop的时间复杂度是O(1). 2. 题 ...

  8. 关于CPU、指令集、架构、芯片的一些科普

    作者:王强链接:https://zhuanlan.zhihu.com/p/19893066来源:知乎 随着智能设备的广泛普及,这几年媒体上越来越多的出现关于"架构""AR ...

  9. 自制jq分页插件

    由于第一次写jq插件,中间有借鉴别人的代码. (function(){ var ms = { fillHtml: function(obj, option) { obj.empty(); var to ...

  10. 8 个有用的 HTML5 标签

    作为一个 web 前端开发者,在制作页面的时候你会从一大堆不同的标签中选择合适的标签来完成相应的功能.有些 HTML5 标签广为流传,例如 <article> <header> ...