Как использовать нулевой тип в iAsyncenumerable или листовой тип, как не нулевойC#

Место общения программистов C#
Anonymous
Как использовать нулевой тип в iAsyncenumerable или листовой тип, как не нулевой

Сообщение Anonymous »

У меня есть метод, который проверяет, является ли значение по умолчанию или имеет значение. Когда он имеет значение, я хочу вернуть значение. Входной объект нулевы, но iAsyncenumerable не принимает нулевые переменные.

Код: Выделить всё

public static HasValueResult HasValue(this TEntity? obj) where TEntity : struct
{
bool hasValue = false;
TEntity value = default;
HasValueResult result = default;

if(obj is IEnumerable enumerable)
{
hasValue = enumerable.Any();
value = (TEntity)obj;

result = new HasValueResult(hasValue, value);
}
else if(obj is Enum)
{
hasValue = true;
value = (TEntity)obj;

result = new HasValueResult(hasValue, value);
}
else if(obj is IAsyncEnumerable coll)
{

ICollection items = [];
ValueTask t = ((IAsyncEnumerable)obj).AnyAsync();
hasValue = t.Result;

IAsyncEnumerator en = ((IAsyncEnumerable)obj).GetAsyncEnumerator();
while(en.MoveNextAsync().Result)
{
items.Add(en.Current);
}

result = new HasValueResult(hasValue, null, items);
}
else
{
hasValue = obj is Guid g ? g.Equals(Guid.Empty) : !string.IsNullOrEmpty(obj.ToString());
}

return result;
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... s-none-nul

Вернуться в «C#»