c# 一些警告的处理方法
在使用.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# 一些警告的处理方法的更多相关文章
- Apple Mach-O Linker Warning 警告解决的方法
此警告解决的方法: 项目名字 -> targets -> Build Settings -> search path 把里面无用的东西 点 减号 删掉 即可了. $(function ...
- Eclipse中Jsp页面警告的解决方法小结
恩,只要是开发人员,这样的小事情总会遇到的,对于这其中的某些警告性的错误是不影响代码的运行的,对应的功能也是能实现的,不过总给人一种不太好看的感觉!如果代码写的比较符合规范,这些问题也就自然而然的消失 ...
- Android“This Handler class should be static or leaks might occur”警告的处理方法
此文属于转载! 最近用到handle在线程中改变UI,会跟给出“This Handler class should be static or leaks might occur”的警告,网上看了很多解 ...
- 8. Unity异常警告错误处理方法
一. The AnimationClip 'cube1_anim' used by the Animation component 'Cube1' must be marked as Legacy. ...
- ItunesConnect:"Missing Push Notification Entitlement"警告-----以及解决方法
最近开发的cordova应用,要做ios的适配,并且发布版本,但是有一次在发测试版本的时候,突然收到一封邮件警告,原文如下: Missing Push Notification Entitlement ...
- sklearn.cross_validation 0.18版本废弃警告及解决方法
转载:cheneyshark 机器环境: scikit-learn==0.19.1 Python 2.7.13 train_test_split基本用法 在机器学习中,我们通常将原始数据按照比例分割为 ...
- 执行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 ...
- Unity异常警告错误处理方法
原地址:http://www.haogongju.net/art/2591936 1. The AnimationClip 'cube1_anim' used by the Animation co ...
- xcode升级到6.0以后遇到的警告错误解决方法
Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo” is depreca ...
- IOS UIAlertView(警告框)方法总结
转自:my.oschina.net/u/2340880/blog/408873?p=1 IOS中UIAlertView(警告框)常用方法总结 一.初始化方法 - (instancetype)initW ...
随机推荐
- mac phpStrom 卸载
cd ~/Library/Logs/cd ~/Library/Application\ Supportcd ~/Library/Preferences/cd ~/Library/Caches/
- Shiro Session放到Redis中常遇到的问题
Shiro会话管理:https://shiro.apache.org/session-management.html#SessionManagement-CustomSessionIDs Redis主 ...
- mac下启动/停止/重启mysql服务
/usr/local/Cellar/mysql\@5.7/5.7.27_1/bin/mysql.server restart/start/stop
- 如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时 间最长?
使用 jstack 找出消耗 CPU 最多的线程代码
- Java 死锁以及如何避免?
Java 中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java 死锁情况 出现至少两个线程和两个或更多资源. Java 发生死锁的根本原因是:在申请锁时发生了交叉闭环申请.
- 使用Servlet编写增删改查
第一步创建一个表 1 create database liyongzhendb default character set utf8 collate utf8_bin; 2 3 CREATE TABL ...
- java弹框
Java弹窗操作 1.任务简介 本博客介绍两种Java弹窗操作的方法,第一个种是通过弹出对话框显示用户输入的信息,第二种是通过用户输入数字的不同打开不同的程序. 2.弹出对话框的操作 1)任务内容编程 ...
- C# Coding Conventions, Coding Standards & Best Practices
C# Coding Conventions, Coding Standards & Best Practices Cui, Chikun Overview Introduction This ...
- js 关于setTimeout和Promise执行顺序问题
js 关于setTimeout和Promise执行顺序问题 异步 -- Promise和setTimeout 执行顺序 Promise 和 setTimeout 到底谁先执行 定时器的介绍 Jav ...
- windows本地搭建easy-mock环境
起因:由于easy-mock官网很不稳定,所以想搭建自己本地的mock环境 1.首先安装node.js 环境 (提供地址:https://nodejs.org/en/) 2.下载mongoDB 地址( ...