2013-10-13 20:55:28 +02:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
2013-10-17 12:49:52 +02:00
namespace PocketSharp.Ports.NReadability
2013-10-13 20:55:28 +02:00
{
public static class EnumerableExtensions
{
/// <summary>
/// Returns the only one element in the sequence or default(T) if either the sequence doesn't contain any elements or it contains more than one element.
/// </summary>
public static T SingleOrNone < T >( this IEnumerable < T > enumerable )
where T : class
{
// ReSharper disable PossibleMultipleEnumeration
if ( enumerable == null )
{
throw new ArgumentNullException ( "enumerable" );
}
T firstElement = enumerable . FirstOrDefault ();
if ( firstElement == null )
{
// no elements
return null ;
}
T secondElement = enumerable . Skip ( 1 ). FirstOrDefault ();
if ( secondElement != null )
{
// more than one element
return null ;
}
return firstElement ;
// ReSharper restore PossibleMultipleEnumeration
}
}
}