diff --git a/Apewer/CollectionUtility.cs b/Apewer/CollectionUtility.cs index 7ad3b93..fb917c1 100644 --- a/Apewer/CollectionUtility.cs +++ b/Apewer/CollectionUtility.cs @@ -976,6 +976,36 @@ namespace Apewer #endregion + #region With + + /// Array 实例的 with() 方法是使用方括号表示法修改指定索引值的复制方法版本。它会返回一个新数组,其指定索引处的值会被新值替换。 + /// + /// 要修改的数组索引(从 0 开始)。负数索引会从数组末尾开始计数——即当 index < 0 时,会使用 index + array.length。 + /// 要分配给指定索引的任何值。 + /// 一个全新的数组,其中 index 索引处的元素被替换为 value。 + /// + public static T[] With(this T[] array, int index, T value) + { + if (array == null) throw new ArgumentNullException(nameof(array)); + + // 数组长度 + var length = array.Length; + if (array.Length < 1) throw new ArgumentOutOfRangeException(nameof(index)); + + // 要修改的位置 + var offset = index < 0 ? index + length : index; + if (offset >= length || offset < 0) throw new ArgumentOutOfRangeException(nameof(index)); + + // 生成新数组 + var result = new T[array.Length]; + for (var i = 0; i < result.Length; i++) result[i] = array[i]; + result[index] = value; + + return result; + } + + #endregion + } }