Adding null-conditional operator on IEnumerable.GetEnumerator() (#16947)

This commit is contained in:
Steven Maglio 2019-11-11 08:25:37 -08:00 committed by Brennan
parent 9063e4a38b
commit 5b1b8bcb8b
2 changed files with 43 additions and 2 deletions

View File

@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.Http
EmptyDictionary.Collection.CopyTo(array, arrayIndex);
}
_items.CopyTo(array, arrayIndex);
_items?.CopyTo(array, arrayIndex);
}
int ICollection<KeyValuePair<object, object>>.Count => _items?.Count ?? 0;
@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Http
IEnumerator<KeyValuePair<object, object>> IEnumerable<KeyValuePair<object, object>>.GetEnumerator()
=> _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
IEnumerator IEnumerable.GetEnumerator() => _items.GetEnumerator() ?? EmptyEnumerator.Instance;
IEnumerator IEnumerable.GetEnumerator() => _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
private class EmptyEnumerator : IEnumerator<KeyValuePair<object, object>>
{

View File

@ -0,0 +1,41 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.IO.Pipelines;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Primitives;
using Xunit;
namespace Microsoft.AspNetCore.Http
{
public class ItemsDictionaryTests
{
[Fact]
public void GetEnumerator_ShouldResolveWithoutNullReferenceException()
{
// Arrange
var dict = new ItemsDictionary();
// Act and Assert
IEnumerable en = (IEnumerable) dict;
Assert.NotNull(en.GetEnumerator());
}
[Fact]
public void CopyTo_ShouldCopyItemsWithoutNullReferenceException() {
// Arrange
var dict = new ItemsDictionary();
var pairs = new KeyValuePair<object, object>[] { new KeyValuePair<object, object>("first", "value") };
// Act and Assert
ICollection<KeyValuePair<object, object>> cl = (ICollection<KeyValuePair<object, object>>) dict;
cl.CopyTo(pairs, 0);
}
}
}