1

我目前正在使用 .NET 的 DotSpatial 库(GIS 库)。我的 AppManager 类中出现错误。AppManager 是一个组件,它管理扩展(包括数据提供者)的加载,并帮助文件序列化:

在 foreach 中标记的代码

public IEnumerable<string> GetDirectoriesNestedOneLevel()
{
       // Visit each directory in Directories Property (usually set by application)
    foreach (string directory in Directories.Union(new[] { "Data Extensions", "Tools" }))
    {
        string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, directory);

        if (Directory.Exists(path))
        {
            yield return path;

            // Add all of the directories in here, nested one level deep.
            var dirs = Directory.EnumerateDirectories(path, "*", SearchOption.TopDirectoryOnly);

            foreach (var dir in dirs)
            {
                yield return dir;
            }
        }
    }
}

参数名称

第一的

来源

系统核心

堆栈跟踪

在 System.Linq.Enumerable.Union[TSource](IEnumerable1 first, IEnumerable1 秒)在 c:\dev\DotSpatial\DotSpatial.Controls\Extensions\AppManager.cs 中的 DotSpatial.Controls.AppManager.d__9.MoveNext() 处:c:\dev 中 DotSpatial.Controls.AppManager.GetCatalog() 的第 581 行\DotSpatial\DotSpatial.Controls\Extensions\AppManager.cs:DotSpatial.Controls.AppManager.LoadExtensions() 中的第 563 行,位于 c:\dev\DotSpatial\DotSpatial.Controls\Extensions\AppManager.cs:DemoMap.MainForm 中的第 329 行。 C:\Users\Logan B. Lehman\Documents\DemoMap\DemoMap\MainForm.cs 中的 .ctor():C:\Users\Logan B.Lehman\Documents\DemoMap\ 中 DemoMap.Program.Main() 的第 230 行DemoMap\Program.cs:第 13 行 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess。HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state ) 在 System.Threading.ThreadHelper.ThreadStart()

知道这里发生了什么吗?*将不胜感激*

4

3 回答 3

2

我的猜测是“目录”为空。从代码片段中不清楚应该在哪里设置,但在这种情况下它没有被设置。由于 Union 的实现方式,该错误有点神秘:它是一个扩展方法,因此在幕后实际调用是:

IEnumerableExtensions.Union(IEnumerable first, IEnumerable second)

根据目录是什么,在 foreach 之前,一个快速修复方法是:

if (Directories == null) { Directories = new List<string>().ToArray(); }

另一种可能性是:

var allDirs = new List<string>();
if (Directories != null) { allDirs.AddRange(Directories);}
allDirs.AddRange(new[]{ "Data Extensions", "Tools" });
foreach(string directory in allDirs)

但更好的解决方法是转到设置目录的代码并确保它始终设置一个值......

于 2012-02-07T23:23:18.883 回答
0

Directories属性为空,找出原因。

于 2012-02-07T23:20:13.593 回答
0

多写一行代码,计算目录列表以使代码更清晰,pleaaaase!
你确定你正确使用了 union 吗?像 AUnionB= A.Union(B) ?? 您的代码中不清楚。

于 2012-02-07T23:26:11.423 回答