tôi có phương pháp sau đây trong mã của tôi # C:Làm thế nào có thể trong mã này: "ArgumentOutOfRangeException: startIndex không thể lớn hơn chiều dài chuỗi"?
/// <summary>
/// Removes the first (leftmost) occurence of a <paramref name="substring"/> from a <paramref name="string"/>.
/// </summary>
/// <param name="string">The string to remove the <paramref name="substring"/> from. Cannot be <c>null</c>.</param>
/// <param name="substring">The substring to look for and remove from the <paramref name="string"/>. Cannot be <c>null</c>.</param>
/// <returns>
/// The rest of the <paramref name="string"/>, after the first (leftmost) occurence of the <paramref name="substring"/> in it (if any) has been removed.
/// </returns>
/// <remarks>
/// <list type="bullet">
/// <item>If the <paramref name="substring"/> does not occur within the <paramref name="string"/>, the <paramref name="string"/> is returned intact.</item>
/// <item>If the <paramref name="substring"/> has exactly one occurence within the <paramref name="string"/>, that occurence is removed, and the rest of the <paramref name="string"/> is returned.</item>
/// <item>If the <paramref name="substring"/> has several occurences within the <paramref name="substring"/>, the first (leftmost) occurence is removed, and the rest of the <paramref name="string"/> is returned.</item>
/// </list>
/// </remarks>
/// <exception cref="ArgumentNullException">
/// The <paramref name="string"/> is <c>null</c>. -or- The <paramref name="substring"/> is <c>null</c>.
/// </exception>
public static string RemoveSubstring(string @string, string substring)
{
if (@string == null)
throw new ArgumentNullException("string");
if (substring == null)
throw new ArgumentNullException("substring");
var index = @string.IndexOf(substring);
return index == -1
? @string
: @string.Substring(0, index) + @string.Substring(index + substring.Length);
}
Việc thực hiện trông rất đơn giản và rõ ràng, và có một phạm vi tuyệt vời bằng cách kiểm tra đơn vị. Không có kết quả bất ngờ nào xảy ra trên máy của tôi, xây dựng máy chủ hoặc bất kỳ máy nào khác mà tôi có quyền truy cập hoặc trong hầu hết các môi trường sản xuất.
Trừ rằng chỉ có một khách hàng từ xa thỉnh thoảng báo cáo một vụ tai nạn ứng dụng tại phương pháp này với các vết đống sau:
System.ArgumentOutOfRangeException: startIndex cannot be larger than length of string.
Parameter name: startIndex
at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
at System.String.Substring(Int32 startIndex)
at MyNamespace.StringUtils.RemoveSubstring(String string, String substring)
at ...
Thật không may, tôi không có một truy cập từ xa đến môi trường sản xuất này hoặc dữ liệu của nó, hoặc cho bất kỳ thông tin bổ sung nào. Đối với một số lý do, hiện tại tôi không thể triển khai hệ thống ghi nhật ký hoặc thu thập kết xuất sự cố ở đó.
Nhìn vào mã và thử kết hợp các đối số khác nhau, tôi không thể tưởng tượng được ngoại lệ này có thể xảy ra như thế nào.
Bạn có thể giúp tôi với một số ý tưởng không?
Chỉ mụcOf là văn hóa cụ thể. Hãy xem các ví dụ tại đây (http://msdn.microsoft.com/en-us/library/ms224425.aspx) để xem cách chỉ mục có thể thay đổi. –
Bạn có thể sử dụng phương thức String.Remove (Int32, Int32) tốt hơn. Bạn có thể thấy nó tha thứ hơn. ': @ string.Remove (index, substring.Length)' – tinstaafl