c# - 元组 .Find 和对象引用未设置为对象的实例
问题描述
我有一个包含 HTTP 标头及其值的元组。我的这部分代码使用 Content-Encoding: 标头来确定内容是使用 gzip 压缩还是 deflate 压缩的。
var contentEncoding = responseHeaders.Find(p => p.Item1.ToLower() == "content-encoding");
// decompress the content if needed
if (!String.IsNullOrEmpty(contentEncoding.Item2))
if (contentEncoding.Item2.ToLower() == "gzip")
bodyPlain = Tools.Gunzip(ret);
else if (contentEncoding.Item2.ToLower() == "deflate")
bodyPlain = Tools.Decompress(ret);
else
bodyPlain = UTF8Encoding.UTF8.GetString(ret);
else
bodyPlain = UTF8Encoding.UTF8.GetString(ret);
我的问题是,如果 responseHeaders.Find 不返回结果,那么 contentEncoding.Item2 不存在,我得到
你调用的对象是空的。
我尝试使用 String.IsNullOrEmpty 和 !=null 检查 contentEncoding.Item2,但它仍然返回上述错误。
我还尝试在使用它之前指定 contentEncoding,如下所示:
var contentEncoding = new Tuple<string,string>("","");
contentEncoding = responseHeaders.Find(p => p.Item1.ToLower() == "content-encoding");
但仍然得到同样的错误。
我在这里做错了什么,有没有更好的方法来实现这一点?
解决方案
这似乎对我来说效果更好。感谢 Thomas Schremser 提出的合并运算符的想法:
switch (contentEncoding?.Item2.ToLower() ?? String.Empty)
{
case "":
bodyPlain = UTF8Encoding.UTF8.GetString(ret);
break;
case "gzip":
bodyPlain = Tools.Gunzip(ret);
break;
case "deflate":
bodyPlain = Tools.Decompress(ret);
break;
}
推荐阅读
- javascript - 检查失败的 HTTP 请求
- c# - AutoCAD C# 版本 .dwl 文件
- sql - Golang 中的多租户
- python - Python - PyQt:QThread 完成后继续
- php - 带有嵌套路由的 PHP REST API
- excel - 日期之间的 Sumproduct 与跨列的附加条件
- jenkins - 当特定 JIRA 项目下的所有问题的状态更改为“IN PROGRESS”状态时触发 Jenkins 构建
- css - SVG 在多个图层上的悬停状态,不仅是顶层
- selenium - 如何使用 Jmeter/任何其他工具从所有请求中捕获一些事件请求
- python - 如何在 Celery 中异步接收已处理的消息?