使用c#我需要从谷歌地图获取每种地址类型,我使用的是foreach和asign值。有比下一个代码更好的方法吗?:
string street_number;
string route;
string locality;
string administrative_area_level_3;
string administrative_area_level_2;
string administrative_area_level_1;
string country;
foreach (var addressComp in result.results[0].address_components)
{
var addr = addressComp;
if (addr.types[0] == "street_number")
street_number = addr.long_name;
else if (addr.types[0] == "route")
route = addr.long_name;
else if (addr.types[0] == "locality")
locality = addr.long_name;
else if (addr.types[0] == "administrative_area_level_3")
administrative_area_level_3 = addr.long_name;
else if (addr.types[0] == "administrative_area_level_2")
administrative_area_level_2 = addr.long_name;
else if (addr.types[0] == "administrative_area_level_1")
administrative_area_level_1 = addr.long_name;
else if (addr.types[0] == "country")
country = addr.long_name;
}
答案 0 :(得分:1)
对我来说,一个更易读的代码就是这样使用Linq
{{1}}
可能效率较低,但对我来说可读性很高。
答案 1 :(得分:1)
改为使用switch语句:
switch(addr.types[0]) {
case "street_number":
street_number = addr.long_name;
break;
case "route":
route = addr.long_name;
break;
case "locality":
locality = addr.long_name;
break;
case "administrative_area_level_3":
administrative_area_level_3 = addr.long_name;
break;
case "administrative_area_level_2":
administrative_area_level_2 = addr.long_name;
break;
case "administrative_area_level_1":
administrative_area_level_1 = addr.long_name;
break;
case "country":
country = addr.long_name;
break;
default:
// Error: addr.long_name does not match a case.
break;
}
...或@Habib提到使用Dictionary:
Dictionary<string, string> geo_data = new Dictionary<string, string>();
foreach (var addressComp in result.results[0].address_components)
{
geo_data[addr.types[0]] = addr.long_name;
}
通过使用字典,代码占用的行数明显减少,但可读性也降低,也许更复杂。可能会保存您在应用程序中未使用的结果中的数据,因此我会在您的情况下使用switch。