Это два разных способа сказать одно и то же.
Док говорит (выделение мое):
переменные, объявленные с помощью var, чьи области пропускаются в их содержащую функцию
blockquote>, который отличается от выражения
переменных, объявленных с var, чьи области утечки из их содержащей функции
< / BLOCKQUOTE>
Ваша переменная maxsize
не синхронизируется между потоками, поэтому существует проблема с потоками. Кроме того, ConcurrentQueue
уже имеет функцию ElementAtOrDefault
, которая автоматически возвращает null
, если индекс не существует.
Я бы обновился, чтобы унаследовать от ConcurrentQueue
сам.
public class FixedSizeConcurrentQueue<T> : ConcurrentQueue<T>
{
public int MaxSize { get; }
public FixedSizeConcurrentQueue(int maxSize)
{
MaxSize = maxSize;
}
public new void Enqueue(T obj)
{
base.Enqueue(obj);
while (base.Count > MaxSize)
{
T outObj;
base.TryDequeue(out outObj);
}
}
public T GetElementAt(int index)
{
return base.ElementAtOrDefault(index);;
}
}