|
|
@ -976,6 +976,36 @@ namespace Apewer |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region With
|
|
|
|
|
|
|
|
/// <summary>Array 实例的 with() 方法是使用方括号表示法修改指定索引值的复制方法版本。它会返回一个新数组,其指定索引处的值会被新值替换。</summary>
|
|
|
|
/// <param name="array"></param>
|
|
|
|
/// <param name="index">要修改的数组索引(从 0 开始)。负数索引会从数组末尾开始计数——即当 index < 0 时,会使用 index + array.length。</param>
|
|
|
|
/// <param name="value">要分配给指定索引的任何值。</param>
|
|
|
|
/// <returns>一个全新的数组,其中 index 索引处的元素被替换为 value。</returns>
|
|
|
|
/// <exception cref="ArgumentNullException" />
|
|
|
|
public static T[] With<T>(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
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|