如何用单行代码从string[]取值并设置默认值避免索引越界?
解决C#中数组索引越界时返回默认值的单行方案
这个问题确实挺常见的——??运算符只针对左值为null的场景生效,但像Split返回的数组本身非null,只是索引超出范围时,它就帮不上忙了。给你几个简洁的单行解决方案,完全避开try-catch,还能保证结果永远不为null:
方法一:用LINQ的ElementAtOrDefault(最直接的单行写法)
ElementAtOrDefault方法会在索引超出数组范围时返回对应类型的默认值(对于string来说就是null),之后再配合??运算符把null替换成string.Empty,完美解决问题:
string value = "One - Two"; string firstValue = value.Split('-').ElementAtOrDefault(0) ?? string.Empty; string secondValue = value.Split('-').ElementAtOrDefault(1) ?? string.Empty; string thirdValue = value.Split('-').ElementAtOrDefault(2) ?? string.Empty; // 索引越界,返回string.Empty
额外提示:如果你的原始value可能为null,可以再加一层空值处理,避免调用Split时抛出异常:
string safeThirdValue = (value ?? string.Empty).Split('-').ElementAtOrDefault(2) ?? string.Empty;
方法二:自定义扩展方法(适合多次复用场景)
如果你的代码里经常需要这种“数组取值失败返回默认值”的操作,写个扩展方法能让代码更简洁易读:
public static class ArrayExtensions { public static string GetElementOrDefault(this string[] array, int index, string defaultValue = "") { return index >= 0 && index < array.Length ? array[index] : defaultValue; } }
使用起来就像这样:
string thirdValue = value.Split('-').GetElementOrDefault(2);
两种方法都能满足你的需求,第一种更适合单次使用的单行场景,第二种则适合需要重复调用的场景。
内容的提问来源于stack exchange,提问作者Roy Berris
相关产品推荐
相关产品推荐

