小编Sla*_*low的帖子

Overpass API 中的“节点”和“路径”是什么

我正在使用 Overpass api,想了解 aNode和 a之间的区别Way。下面是每个的 xml 片段。如果有人知道这些数值的含义以及它们与现实世界的关系,我将不胜感激。还有带标签的节点和不带标签的节点有什么区别。

<way id="4600886">
  <nd ref="27605443"/>
  <nd ref="30346321"/>
  <nd ref="1705297211"/>
  <nd ref="391210257"/>
  <nd ref="390384217"/>
  <nd ref="391210271"/>
  <nd ref="32343771"/>
  <nd ref="391210305"/>
  <nd ref="391210664"/>
  <nd ref="97175448"/>
  <tag k="highway" v="secondary"/>
  <tag k="lanes" v="2"/>
  <tag k="name" v="Days Road"/>
  <tag k="surface" v="asphalt"/>
</way>


<node id="18615430" lat="44.2384337" lon="-76.5411605">
  <tag k="created_by" v="r_coastlines"/>
  <tag k="source" v="PGS"/>
</node>
Run Code Online (Sandbox Code Playgroud)

openstreetmap overpass-api

1
推荐指数
1
解决办法
3822
查看次数

为什么异步扩展方法会抛出 System.NullReferenceException

我有两种扩展方法,它们几乎做同样的事情,但一种是异步的

public static class ProjectExtensions
{
   public static Layout GetLayout(this Project project)
   {
      ..
   }

   public static async Task<Layout> GetLayoutAsync(this Project project)
   {
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用.?运算符,因为如果项目为空,我不想调用这些方法:

public async Task<Layout> GetMapFrameLocator()
{    
   Project currentProject = Project.Current;             // this can be null
   var layout1 = await currentProject?.GetLayoutAsync(); // throws!
   var layout2 = currentProject?.GetLayout();            // works fine
}
Run Code Online (Sandbox Code Playgroud)

这两种方法实际上都没有被调用,这是我所期望的,但是 async 会抛出一个空引用异常,这对我来说没有意义,因为 null 没有调用任何方法Project。我知道如果我在静态扩展方法中使用.而不是.?处理空参数,这个问题就会消失,但是这个异常的原因是什么,为什么异步方法不同?

c# extension-methods asynchronous

1
推荐指数
1
解决办法
65
查看次数