📄 listbase.cs
字号:
/// <returns>The index of the last item in the given range that that is equal to <paramref name="item"/>. If no item is equal
/// to <paramref name="item"/>, -1 is returned.</returns>
public virtual int LastIndexOf(T item, int index)
{
int foundIndex = Algorithms.LastIndexOf<T>(Range(0, index + 1), item, EqualityComparer<T>.Default);
return foundIndex;
}
/// <summary>
/// Finds the index of the last item, in the range of <paramref name="count"/> items ending at <paramref name="index"/>,
/// that is equal to <paramref name="item"/>.
/// </summary>
/// <remarks>The default implementation of equality for type T is used in the search. This is the
/// equality defined by IComparable<T> or object.Equals.</remarks>
/// <param name="item">The item to search for.</param>
/// <param name="index">The ending index of the range to check.</param>
/// <param name="count">The number of items in range to check.</param>
/// <returns>The index of the last item in the given range that that is equal to <paramref name="item"/>. If no item is equal
/// to <paramref name="item"/>, -1 is returned.</returns>
public virtual int LastIndexOf(T item, int index, int count)
{
int foundIndex = Algorithms.LastIndexOf<T>(Range(index - count + 1, count), item, EqualityComparer<T>.Default);
if (foundIndex >= 0)
return foundIndex + index - count + 1;
else
return -1;
}
/// <summary>
/// Returns a view onto a sub-range of this list. Items are not copied; the
/// returned IList<T> is simply a different view onto the same underlying items. Changes to this list
/// are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the
/// view, but insertions and deletions in the underlying list do not.
/// </summary>
/// <remarks>
/// <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>
/// <code>Algorithms.ReverseInPlace(deque.Range(3, 6))</code>
/// will reverse the 6 items beginning at index 3.</remarks>
/// <param name="start">The starting index of the view.</param>
/// <param name="count">The number of items in the view.</param>
/// <returns>A list that is a view onto the given sub-part of this list. </returns>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="start"/> or <paramref name="count"/> is negative.</exception>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="start"/> + <paramref name="count"/> is greater than the
/// size of the list.</exception>
public virtual IList<T> Range(int start, int count)
{
return Algorithms.Range<T>(this, start, count);
}
/// <summary>
/// Convert the given parameter to T. Throw an ArgumentException
/// if it isn't.
/// </summary>
/// <param name="name">parameter name</param>
/// <param name="value">parameter value</param>
private T ConvertToItemType(string name, object value)
{
try {
return (T)value;
}
catch (InvalidCastException) {
throw new ArgumentException(string.Format(Strings.WrongType, value, typeof(T)), name);
}
}
/// <summary>
/// Adds an item to the end of the list. This method is equivalent to calling:
/// <code>Insert(Count, item)</code>
/// </summary>
/// <param name="value">The item to add to the list.</param>
/// <exception cref="ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
int IList.Add(object value)
{
int count = Count;
Insert(count, ConvertToItemType("value", value));
return count;
}
/// <summary>
/// Removes all the items from the list, resulting in an empty list.
/// </summary>
void IList.Clear()
{
Clear();
}
/// <summary>
/// Determines if the list contains any item that compares equal to <paramref name="value"/>.
/// </summary>
/// <remarks>Equality in the list is determined by the default sense of
/// equality for T. If T implements IComparable<T>, the
/// Equals method of that interface is used to determine equality. Otherwise,
/// Object.Equals is used to determine equality.</remarks>
/// <param name="value">The item to search for.</param>
bool IList.Contains(object value)
{
if (value is T || value == null)
return Contains((T)value);
else
return false;
}
/// <summary>
/// Find the first occurrence of an item equal to <paramref name="value"/>
/// in the list, and returns the index of that item.
/// </summary>
/// <remarks>Equality in the list is determined by the default sense of
/// equality for T. If T implements IComparable<T>, the
/// Equals method of that interface is used to determine equality. Otherwise,
/// Object.Equals is used to determine equality.</remarks>
/// <param name="value">The item to search for.</param>
/// <returns>The index of <paramref name="value"/>, or -1 if no item in the
/// list compares equal to <paramref name="value"/>.</returns>
int IList.IndexOf(object value)
{
if (value is T || value == null)
return IndexOf((T)value);
else
return -1;
}
/// <summary>
/// Insert a new
/// item at the given index.
/// </summary>
/// <param name="index">The index in the list to insert the item at. After the
/// insertion, the inserted item is located at this index. The
/// first item in the list has index 0.</param>
/// <param name="value">The item to insert at the given index.</param>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="index"/> is
/// less than zero or greater than Count.</exception>
/// <exception cref="ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
void IList.Insert(int index, object value)
{
Insert(index, ConvertToItemType("value", value));
}
/// <summary>
/// Returns whether the list is a fixed size. This implementation always returns false.
/// </summary>
/// <value>Alway false, indicating that the list is not fixed size.</value>
bool IList.IsFixedSize
{
get { return false; }
}
/// <summary>
/// Returns whether the list is read only. This implementation returns the value
/// from ICollection<T>.IsReadOnly, which is by default, false.
/// </summary>
/// <value>By default, false, indicating that the list is not read only.</value>
bool IList.IsReadOnly
{
get { return ((ICollection<T>)this).IsReadOnly; }
}
/// <summary>
/// Searches the list for the first item that compares equal to <paramref name="value"/>.
/// If one is found, it is removed. Otherwise, the list is unchanged.
/// </summary>
/// <remarks>Equality in the list is determined by the default sense of
/// equality for T. If T implements IComparable<T>, the
/// Equals method of that interface is used to determine equality. Otherwise,
/// Object.Equals is used to determine equality.</remarks>
/// <param name="value">The item to remove from the list.</param>
/// <exception cref="ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
void IList.Remove(object value)
{
if (value is T || value == null)
Remove((T)value);
}
/// <summary>
/// Removes the
/// item at the given index.
/// </summary>
/// <param name="index">The index in the list to remove the item at. The
/// first item in the list has index 0.</param>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="index"/> is
/// less than zero or greater than or equal to Count.</exception>
void IList.RemoveAt(int index)
{
RemoveAt(index);
}
/// <summary>
/// Gets or sets the
/// value at a particular index in the list.
/// </summary>
/// <param name="index">The index in the list to get or set an item at. The
/// first item in the list has index 0, and the last has index Count-1.</param>
/// <value>The item at the given index.</value>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="index"/> is
/// less than zero or greater than or equal to Count.</exception>
/// <exception cref="ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
object IList.this[int index]
{
get
{
return this[index];
}
set
{
this[index] = ConvertToItemType("value", value);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -