📄 readonlycollectionbase.cs
字号:
IEqualityComparer<T> equalityComparer = EqualityComparer<T>.Default;
foreach (T i in this) {
if (equalityComparer.Equals(i, item))
return true;
}
return false;
}
/// <summary>
/// Copies all the items in the collection into an array. Implemented by
/// using the enumerator returned from GetEnumerator to get all the items
/// and copy them to the provided array.
/// </summary>
/// <param name="array">Array to copy to.</param>
/// <param name="arrayIndex">Starting index in <paramref name="array"/> to copy to.</param>
public virtual void CopyTo(T[] array, int arrayIndex)
{
int count = this.Count;
if (count == 0)
return;
if (array == null)
throw new ArgumentNullException("array");
if (count < 0)
throw new ArgumentOutOfRangeException("count", count, Strings.ArgMustNotBeNegative);
if (arrayIndex < 0)
throw new ArgumentOutOfRangeException("arrayIndex", arrayIndex, Strings.ArgMustNotBeNegative);
if (arrayIndex >= array.Length || count > array.Length - arrayIndex)
throw new ArgumentException("arrayIndex", Strings.ArrayTooSmall);
int index = arrayIndex, i = 0;
foreach (T item in (ICollection<T>)this) {
if (i >= count)
break;
array[index] = item;
++index;
++i;
}
}
/// <summary>
/// Creates an array of the correct size, and copies all the items in the
/// collection into the array, by calling CopyTo.
/// </summary>
/// <returns>An array containing all the elements in the collection, in order.</returns>
public virtual T[] ToArray()
{
int count = this.Count;
T[] array = new T[count];
CopyTo(array, 0);
return array;
}
/// <summary>
/// Must be overridden to provide the number of items in the collection.
/// </summary>
/// <value>The number of items in the collection.</value>
public abstract int Count { get; }
/// <summary>
/// Indicates whether the collection is read-only. Returns the value
/// of readOnly that was provided to the constructor.
/// </summary>
/// <value>Always true.</value>
bool ICollection<T>.IsReadOnly
{
get { return true; }
}
#endregion
#region IEnumerable<T> Members
/// <summary>
/// Must be overridden to enumerate all the members of the collection.
/// </summary>
/// <returns>A generic IEnumerator<T> that can be used
/// to enumerate all the items in the collection.</returns>
public abstract IEnumerator<T> GetEnumerator();
#endregion
#region ICollection Members
/// <summary>
/// Copies all the items in the collection into an array. Implemented by
/// using the enumerator returned from GetEnumerator to get all the items
/// and copy them to the provided array.
/// </summary>
/// <param name="array">Array to copy to.</param>
/// <param name="index">Starting index in <paramref name="array"/> to copy to.</param>
void ICollection.CopyTo(Array array, int index)
{
int count = this.Count;
if (count == 0)
return;
if (array == null)
throw new ArgumentNullException("array");
if (count < 0)
throw new ArgumentOutOfRangeException("count", count, Strings.ArgMustNotBeNegative);
if (index < 0)
throw new ArgumentOutOfRangeException("index", index, Strings.ArgMustNotBeNegative);
if (index >= array.Length || count > array.Length - index)
throw new ArgumentException("index", Strings.ArrayTooSmall);
int i = 0;
foreach (object o in (ICollection)this) {
if (i >= count)
break;
array.SetValue(o, index);
++index;
++i;
}
}
/// <summary>
/// Indicates whether the collection is synchronized.
/// </summary>
/// <value>Always returns false, indicating that the collection is not synchronized.</value>
bool ICollection.IsSynchronized
{
get { return false; }
}
/// <summary>
/// Indicates the synchronization object for this collection.
/// </summary>
/// <value>Always returns this.</value>
object ICollection.SyncRoot
{
get { return this; }
}
#endregion
#region IEnumerable Members
/// <summary>
/// Provides an IEnumerator that can be used to iterate all the members of the
/// collection. This implementation uses the IEnumerator<T> that was overridden
/// by the derived classes to enumerate the members of the collection.
/// </summary>
/// <returns>An IEnumerator that can be used to iterate the collection.</returns>
IEnumerator IEnumerable.GetEnumerator()
{
foreach (T item in this) {
yield return item;
}
}
#endregion
/// <summary>
/// Display the contents of the collection in the debugger. This is intentionally private, it is called
/// only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar
/// format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.
/// </summary>
/// <returns>The string representation of the items in the collection, similar in format to ToString().</returns>
internal string DebuggerDisplayString()
{
const int MAXLENGTH = 250;
System.Text.StringBuilder builder = new System.Text.StringBuilder();
builder.Append('{');
// Call ToString on each item and put it in.
bool firstItem = true;
foreach (T item in this) {
if (builder.Length >= MAXLENGTH) {
builder.Append(",...");
break;
}
if (!firstItem)
builder.Append(',');
if (item == null)
builder.Append("null");
else
builder.Append(item.ToString());
firstItem = false;
}
builder.Append('}');
return builder.ToString();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -