【问题标题】:Getting coordinates and storing in c# model using async [duplicate]使用异步获取坐标并存储在c#模型中[重复]
【发布时间】:2019-04-27 14:51:27
【问题描述】:

我正在尝试获取存储在地址模型中的坐标。我正在使用带有 Chadly/Geocoding.net 的 google maps api 来获取坐标,但它需要异步,而且我从未在模型中使用过异步并且在使其工作时遇到问题。

这是给我这个错误

“无法将类型'Geocoding.Location'隐式转换为'System.Threading.Tasks.Task<Geocoding.Location>'”

我必须做些什么才能让它工作?

   public string FullAddress 
    {
        get 
        { 
            return Address + " " + City + " " + State + "" + ZipCode;
        }
    }
    public async Task<Geocoding.Location> Coordinates
    {
        get
        {
            IEnumerable<Address> addresses = await geocoder.GeocodeAsync(FullAddress);

            return addresses.First().Coordinates;
        }

    }

【问题讨论】:

  • 有什么问题?有什么错误吗?
  • 嘿 Nkosi 我更新了我收到的错误。
  • 我建议你不要从属性 getter 调用异步方法。让他们成为一种方法。另外,请提供Minimal, Complete, and Verifiable example,因为我们根本无法仅从您提供的代码中判断您实际需要什么
  • Coordinates 应该是一种方法。你不能有异步属性

标签: c# .net


【解决方案1】:

Coordinates 应该重构为一个方法。你不能有异步属性

public async Task<Geocoding.Location> GetCoordinates(){
    IEnumerable<Address> addresses = await geocoder.GeocodeAsync(FullAddress);
    return addresses.First().Coordinates;
}

【讨论】:

    【解决方案2】:

    很遗憾,您不能在 C# 中使用异步属性 getter。

    只需将其转换为方法,它就可以正常工作。

    public async Task<Geocoding.Location> GetCoordinates()
    {
         IEnumerable<Address> addresses = await geocoder.GeocodeAsync(FullAddress);
    
         return addresses.First().Coordinates;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 2021-06-20
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多