当您同时使用 Split 和 FirstOrDefault 方法时,空值检查的最有效方法或最佳实践是什么?

What is the most efficient way or best practice for null check when you use Split and FirstOrDefault methods together?

我同时使用 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();
    }

谢谢大家的回答。

测试都不需要:

首先,不要对同一个数据运行Split多次:

var splitSlashAbsPath = HttpContext.Current.Request.Url.AbsolutePath.Split('/');

来自 Split 的 return 数组永远不能为 null

//    if (splitSlashAbsPath != null &&

Split 中的 return 数组永远不能为零长度

//        splitSlashAbsPath.Length > 0 &&

所以 Last() 中的 return 永远不会为 null

//        splitSlashAbsPath.Last() != null &&

不要 运行 对同一数据进行多次拆分(并且对数组调用 Last 没有意义)

var splitDotAbsPath = splitSlashAbsPath[splitSlashAbsPath.Length-1].Split('.');

Split 中的 return 数组永远不能为 null

//        splitDotAbsPath != null &&

Split 中的 return 数组永远不能为零长度

//        splitDotAbsPath.Length > 0 &&

因此,Split 中的 First() 永远不会为 null

//        splitDotAbsPath.First() != null)
//    {

既然可以调用Last,那么调用LastOrDefault就没有意义了 FirstOrDefault

相同
//        pageName = splitDotAbsPath.FirstOrDefault();

在数组上调用 First 也没有意义

pageName = splitDotAbsPath[0];

//    }

所以,总而言之你有:

var splitSlashAbsPath = HttpContext.Current.Request.Url.AbsolutePath.Split('/');
var splitDotAbsPath = splitSlashAbsPath[splitSlashAbsPath.Length-1].Split('.');
pageName = splitDotAbsPath[0];

但是,一般来说,使用Split只获取一个元素是非常低效的,所以这样会更好:

var path = HttpContext.Current.Request.Url.AbsolutePath;
var pastSlashPos = path.LastIndexOf('/') + 1;
var countUntilDot = path.IndexOf('.', pastSlashPos);
countUntilDot = (countUntilDot >= 0 ? countUntilDot : path.Length) - pastSlashPos;
pageName = path.Substring(pastSlashPos, countUntilDot);