33 lines
778 B
C#
33 lines
778 B
C#
using System.Collections.Generic;
|
|
|
|
namespace GodotHostTest.GodotDI;
|
|
|
|
public static class EnumerableExtensions
|
|
{
|
|
public enum SingleFailureReason
|
|
{
|
|
LessThanOne,
|
|
MoreThanOne
|
|
}
|
|
|
|
public static T? Single<T>(this IEnumerable<T> enumerable, out SingleFailureReason? failureReason)
|
|
where T : class
|
|
{
|
|
using var enumerator = enumerable.GetEnumerator();
|
|
if (!enumerator.MoveNext())
|
|
{
|
|
failureReason = SingleFailureReason.LessThanOne;
|
|
return null;
|
|
}
|
|
|
|
var value = enumerator.Current;
|
|
if (enumerator.MoveNext())
|
|
{
|
|
failureReason = SingleFailureReason.MoreThanOne;
|
|
return null;
|
|
}
|
|
|
|
failureReason = null;
|
|
return value;
|
|
}
|
|
} |