首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArgumentNullException未被处理-值不能为空。参数名称:第一

ArgumentNullException未被处理-值不能为空。参数名称:第一
EN

Stack Overflow用户
提问于 2012-02-07 23:15:48
回答 3查看 12.8K关注 0票数 1

我目前正在使用DotSpatial库.NET (地理信息系统库)。我的AppManager类中有一个错误。AppManager是管理扩展加载(包括数据提供程序)并帮助文件序列化的组件:

代码在foreach处被标记

代码语言:javascript
复制
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;
            }
        }
    }
}

ParamName

优先

System.Core

StackTrace

DotSpatial.Controls.AppManager.d__9.MoveNext() in c:\dev\DotSpatial\DotSpatial.Controls\Extensions\AppManager.cs:line 581 at DotSpatial.Controls.AppManager.GetCatalog() in c:\dev\DotSpatial\DotSpatial.Controls\Extensions\AppManager.cs:line 563 at DotSpatial.Controls.AppManager.LoadExtensions() at c:\dev\DotSpatial\DotSpatial.Controls\Extensions\AppManager.cs:line 329 atC:\Users\Logan B. Lehman\Documents\DemoMap\DemoMap\MainForm.cs:line 230 at DemoMap.Program.Main() in C:\Users\Logan B. Lehman\Documents\DemoMap\DemoMap\Program.cs:line 13 at System.AppDomain._nExecuteAssembly(RuntimeAssembly程序集,在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()的System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence,String[] args)

在System.Threading.ThreadHelper.ThreadStart_Context(Object州)

在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态,布尔ignoreSyncCtx在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,Object状态)在System.Threading.ThreadHelper.ThreadStart()

知道这里发生了什么吗?*我会非常感激的*

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-07 23:23:18

我猜“目录”是空的。从代码片段中还不清楚应该将其设置在何处,但在本例中没有设置。由于Union的实现方式,这个错误有点神秘:它是一种扩展方法,因此在幕后实际调用是:

代码语言:javascript
复制
IEnumerableExtensions.Union(IEnumerable first, IEnumerable second)

根据目录的不同,在foreach之前,有一个快速修复方法:

代码语言:javascript
复制
if (Directories == null) { Directories = new List<string>().ToArray(); }

另一种可能是:

代码语言:javascript
复制
var allDirs = new List<string>();
if (Directories != null) { allDirs.AddRange(Directories);}
allDirs.AddRange(new[]{ "Data Extensions", "Tools" });
foreach(string directory in allDirs)

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

票数 2
EN

Stack Overflow用户

发布于 2012-02-07 23:20:13

Directories属性为null,找出原因。

票数 0
EN

Stack Overflow用户

发布于 2012-02-07 23:26:11

用多一行代码来编写这段代码,在其中计算目录列表,以使代码更加清晰,恳求!

你确定你在正确地使用工会吗?比如AUnionB= A.Union(B)?你的代码不清楚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9185532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档