И здесь, для тех, кто еще не удовлетворен, исходный код из класса .NET-Frameworks GeoCoordinate
, реорганизован в автономный метод:
public double GetDistance(double longitude, double latitude, double otherLongitude, double otherLatitude)
{
var d1 = latitude * (Math.PI / 180.0);
var num1 = longitude * (Math.PI / 180.0);
var d2 = otherLatitude * (Math.PI / 180.0);
var num2 = otherLongitude * (Math.PI / 180.0) - num1;
var d3 = Math.Pow(Math.Sin((d2 - d1) / 2.0), 2.0) + Math.Cos(d1) * Math.Cos(d2) * Math.Pow(Math.Sin(num2 / 2.0), 2.0);
return 6376500.0 * (2.0 * Math.Atan2(Math.Sqrt(d3), Math.Sqrt(1.0 - d3)));
}
FeedBackScore = Convert.ToInt32(item.Descendants(ns + "FeedbackScore").Value)
Вы ошибочно проверили имена узлов Seller
, а не их дочерних элементов. Таким образом, FirstOrDefault()
даст null
(условие Where()
никогда не выполняется из-за неправильного узла), а Convert.ToIn32(null)
даст 0
.
Чтобы исправить это, вы можете напрямую перейти к узлу «FeedbackScore» и преобразовать его значение следующим образом
FeedBackScore = Convert.ToInt32(item.Descendants("FeedBackValue").FirstOrDefault()?.Value),