Cannot convert type 'System.Nullable[]' to 'double[]?' via a built-in conversion

var response = await _controller.SendEmbeddingRequest(request);
var resModel = JsonSerializer.Deserialize<EmbeddingResponse>(response);    
if (resModel != null && resModel.data.Count() > 0)
{
    var embedding = resModel.data[0].embedding;
    return embedding as double[];
}

Последняя строка выдаёт ошибку:

Cannot convert type 'System.Nullable<double>[]' to 'double[]?' via a built-in conversion.

Как вернуть Task<double[]>?


Ответы (1 шт):

Автор решения: aepot

Можете поставить тип возвращаемого значения метода

async Task<double?[]> ...

И просто

return embedding;

И за пределами метода уже разбираться, что делать если значение элемента массива null.

Либо отконвертировать массив из double?[] в double[], допустим если null, то заменить на 0.

return Array.ConvertAll(embedding, x => x ?? 0.0);

Но это приведёт к дополнительному клонированию массива.

Если сам embedding может быть null, то можно дописать так

return embedding is null ? default : Array.ConvertAll(embedding, x => x ?? 0.0);

Вместо default, который в данном случае null, приведённый к типу возвращаемого значения double[], можете вернуть пустой массив. В .NET 8 это просто [], в более ранних версиях это Array.Empty<double>(). Это уж как вам по логике удобнее.

→ Ссылка