【发布时间】:2020-04-12 18:42:14
【问题描述】:
我同时使用 Split 和 LastOrDefault 方法,我使用此代码块进行空检查。但这对我来说似乎不是最有效的方法。因为我使用了很多检查和 && 运算符。好像有点难看。有没有办法以更好的方式完成这个空检查? (我在网上搜索但找不到相关答案。)
注意:C# 语言版本 4.0
这是我的代码:
if (HttpContext.Current.Request.Url.AbsolutePath.Split('/') != null &&
HttpContext.Current.Request.Url.AbsolutePath.Split('/').Length > 0 &&
HttpContext.Current.Request.Url.AbsolutePath.Split('/').Last() != null &&
HttpContext.Current.Request.Url.AbsolutePath.Split('/').Last().Split('.') != null &&
HttpContext.Current.Request.Url.AbsolutePath.Split('/').Last().Split('.').Length > 0 &&
HttpContext.Current.Request.Url.AbsolutePath.Split('/').Last().Split('.').First() != null)
{
pageName = HttpContext.Current.Request.Url.AbsolutePath.Split('/').LastOrDefault().Split('.').FirstOrDefault();
}
感谢所有回答。
【问题讨论】:
-
如果将
.Last()替换为.LastOrDefault(),则不需要前面的长度检查,与First()相同。 -
如果您使用的是 C# 4,那么没有比拥有大量
&&更好的选择了。您可能希望在此过程中声明一些变量以避免多次重新评估 Split,但它不会变得更好。为什么是旧的 C# 版本? -
感谢您对 Lasse 的评论,我的公司有很多 .net/c# 版本较旧的产品,包括 .net framework 2.0。他们有许多关于更改框架或语言版本的先决条件。所以不能升级版本。将完全开发整个产品,而不是升级。
-
好的,但是您(和您的团队、公司)知道更新 C# 不一定需要更新的 .NET 框架,对吗?您需要更新的编译器,但它应该能够针对较旧的 .NET 框架并仍使用较新的 C# 版本。当然,在较新的 C# 版本中有些东西需要框架支持,但是如果您使用 nuget 包或只是自定义类来填充这些东西,或者只是远离使用它们,那么您应该能够一直向上移动到至少C# 7(我相信)。但是,如果您有政策,......
-
其实我是这么认为的。当我在 csproj 中搜索高级构建设置菜单或 LangVersion 参数时,用于更改语言版本。但我找不到任何 Visual Studio 2019-2017-2015 高级构建设置菜单或任何带有 LangVersion 配置参数的 csproj。所以我无法改变它。我的 WebForm 项目不包含任何 .csproj 或等效文件。 (我不擅长WebForm,可能是web表单没有csproj文件。)Visual Studio 2019 webform项目->右键->属性页->构建选项卡->没有高级构建设置选项。跨度>
标签: linq c#-4.0 split null-check