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>()
. Это уж как вам по логике удобнее.