C# 正在尝试向我的数据库发送一个双精度数据集“0”;使用未分配的局部变量;“lat”+&引用;液化天然气“;

C# 正在尝试向我的数据库发送一个双精度数据集“0”;使用未分配的局部变量;“lat”+&引用;液化天然气“;,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,试图将两个双精度字符串发送到我的数据库,但出现错误: “使用未分配的局部变量“lat”+“lng”。第一次使用double,所以我不确定到底要做什么 Geocoder gc = new Geocoder(); Task<IEnumerable<Position>> result = gc.GetPositionsForAddressAsync(theEnteredAdress); IEnumerable<Position> data = await resu

试图将两个双精度字符串发送到我的数据库,但出现错误: “使用未分配的局部变量“lat”+“lng”。第一次使用double,所以我不确定到底要做什么

Geocoder gc = new Geocoder();
Task<IEnumerable<Position>> result =
gc.GetPositionsForAddressAsync(theEnteredAdress); 
IEnumerable<Position> data = await result;

double lat;
double lng;
foreach (Position p in data)
{   
    lat = p.Latitude;
    lng = p.Longitude;
}

var sendInfo = await dbAPI.createInfo(lat.ToString(), lng.ToString());
// ^^ here are the two errors. I want to send them as strings
Geocoder gc=new Geocoder();
任务结果=
gc.GetPositionsForAddressAsync(接口地址);
IEnumerable data=等待结果;
双lat;
双液化天然气;
foreach(数据中的位置p)
{   
纬度=纬度;
lng=p.经度;
}
var sendInfo=await dbAPI.createInfo(lat.ToString(),lng.ToString());
//^^以下是两个错误。我想将它们作为字符串发送

如果
数据
没有任何项,则无法初始化变量。请尝试:

double lat = 0;
double lng = 0;
foreach (Position p in data)
{   
    lat = p.Latitude;
    lng = p.Longitude;
}

这是一种奇怪的逻辑,您实际上只是将
lat
lng
赋值给
data

中的最后一个值,如果
data
没有项目,您的变量就不会被初始化。请尝试:

double lat = 0;
double lng = 0;
foreach (Position p in data)
{   
    lat = p.Latitude;
    lng = p.Longitude;
}

不过,这是一种奇怪的逻辑,您实际上只是将
lat
lng
赋值给
data

中的最后一个值,只需将其添加到变量声明中:

双lat=0;
double lng=0;

只需将其添加到变量声明中:

双lat=0;
double lng=0;

在我看来,这更清楚地说明了发生了什么,应该可以解决您遇到的问题(这表明
getpositionsforadressasync()
并不总是返回数据):


在我看来,这更清楚地说明了正在发生的事情,应该可以解决您遇到的问题(这表明
getpositionsforadressasync()
并不总是返回数据):



我的猜测是,
await
调用也应该在
foreach
中完成。因此我不需要foreach出数据?我只需要用户输入地址的值,然后将其发送到数据库。不过现在似乎工作正常?我的猜测是,
await
调用也应该在
foreach中完成。所以我不需要foreach输出数据?我只需要用户输入地址的值,然后将其发送到数据库。但现在似乎工作正常?请记住,数据中只有最后一个位置的lat&long。每次通过foreach循环,您都会覆盖它们。您确定应该调用数据库吗API在foreach循环之外?您希望它调用API多少次?只有一次。它现在可以正常工作了?如果我有它在里面,我有两个具有相同数据的表请记住,您将只拥有数据中最后一个位置的lat&long。您每次都通过foreach循环覆盖它们。您确定应该调用它们吗在foreach循环之外调用API?您希望它调用API多少次?只有一次。现在它可以正常工作了?如果我有它,我得到了两个具有相同数据的表为什么要将内容放入数组中?var p=data.LastOrDefault();'然后检查null是否更干净?@SKall-试试看,你就会知道原因。这是一个
IEnumerable
,而
Position
是一个结构。因此比较
LastOrDefault()的结果
to
null
总是没有结果的。但是对于引用类型,是的,我会这样做。明白了。我通常会在这些情况下使用Select,但那是另一回事。为什么要将内容放入数组中?var p=data.LastOrDefault()不是吗;'然后检查null是否更干净?@SKall-试试看,你就会知道原因。这是一个
IEnumerable
,而
Position
是一个结构。因此比较
LastOrDefault()的结果
null
总是没有结果的。但是对于引用类型,是的,我会这样做。明白了。我通常会在这些情况下使用Select,但那是另一回事。