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 ...
随机推荐
- linklist template
#include <iostream.h> typedef int ElemType; typedef struct LNode { ElemType data; struct LNode ...
- java中遗留的小问题
一.类型转换 short s = 1; s = s + 1; //false,因为1是int类型,会损失精度 short s = 1; s += 1; //true,因为+=有自带强转 二.逻辑运算符 ...
- 数据库连接(Database link)?
在一个用户下,可以获取到另外的用户下的表的数据,通常在跨数据库时使用. create database link link93 connect to scott identified by tiger ...
- 如何获取 topic 主题的列表?
bin/kafka-topics.sh --list --zookeeper localhost:2181
- 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动 的区别在哪里?
Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联 集合对象时,可以根据对象关系模型直接获取,所以它是全自动的.而 Mybatis 在查询关联对象或关联集 ...
- 部署新项目自动对数据库进行migrate和让用户收到创建用户/超级用户信息
当项目中的models有数据表的时候,普通做法是用docke exec -it hello_web_1 bash,进入容器进行migrate,但是我们想要容器一启动就自动创建数据表,可以修改docke ...
- 怎么将 byte 转换为 String?
可以使用 String 接收 byte[] 参数的构造器来进行转换,需要注意的点是要使用 的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也 可能不同.
- springboot+shiro 01 - 实现权限控制
sb_shiro_session <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...
- BMZCTF ssrfme
<?php if(isset($_GET) && !empty($_GET)){ $url = $_GET['file']; $path = "upload/" ...
- poj_3253_priority queue
描述 农夫约翰想要修篱墙,他需要N块木板,第i块板长Li.然后他买了一块很长的板子,足够他分成N块.忽略每次锯板子带来的损失. 约翰忘记买锯子了,于是像Don借.Don要收费,每次锯一下,就要收一次板 ...