You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

C#如何单行处理Split结果:避免单独声明变量与重复调用Split

解决方案:避免重复Split且不单独声明变量的写法

当然可行!你可以通过几种方式在单次调用Split的同时,在表达式内暂存结果,不用单独声明变量。下面是几个简洁的实现方案:


方案1:使用C# 8+的Switch表达式(推荐

这是最现代、可读性最好的写法,利用switch表达式的模式匹配特性,一次性捕获Split的结果并进行判断:

var result = name.Split(' ') switch
{
    var names when names.Length > 1 => Tuple.Create(string.Join(" ", names[0..^1]), names[^1]),
    _ => Tuple.Create(name, string.Empty)
};

说明:

  • 先执行一次name.Split(' '),把结果传入switch表达式
  • 通过var names when names.Length > 1捕获Split的结果,同时判断数组长度是否大于1
  • names[0..^1]是C# 8引入的范围运算符,效果和names.Take(names.Length - 1)完全一致,但写法更简洁直观
  • 如果数组长度不大于1,就返回原name和空字符串组成的Tuple

方案2:LINQ查询表达式中的Let子句

如果你使用的是较旧的C#版本(低于8),可以借助LINQ的查询表达式,通过let关键字暂存Split的结果:

var result = (from splitResult in new[] { name.Split(' ') }
              let names = splitResult
              select names.Length > 1 
                  ? Tuple.Create(string.Join(" ", names.Take(names.Length - 1)), names.Last()) 
                  : Tuple.Create(name, string.Empty)).First();

说明:

  • 我们把Split的结果包装到一个临时数组中,然后在查询里用let names = splitResult把它暂存起来
  • 最后调用.First()取出唯一的结果,整个逻辑在一个表达式内完成,全程只调用一次Split

额外优化:用ValueTuple替代传统Tuple

从C# 7开始,官方更推荐使用ValueTuple(值元组),它比传统的Tuple更轻量,写法也更简洁灵活:

// Switch表达式版本的ValueTuple写法
var result = name.Split(' ') switch
{
    var names when names.Length > 1 => (string.Join(" ", names[0..^1]), names[^1]),
    _ => (name, string.Empty)
};

使用时还可以直接解构元组,进一步提升代码可读性:

var (fullFirstName, lastName) = result;

内容的提问来源于stack exchange,提问作者Mr.Deer

火山引擎 最新活动