ArgumentNullException未处理 - 值不能为null。参数名称:首先

时间:2012-02-07 23:15:48

标签: c# .net stack-trace argumentnullexception

我目前正在使用.NET(GIS库)的DotSpatial库。我在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;
            }
        }
    }
}

ParamName

  

第一

来源

  

System.Core程序

栈跟踪

  

在System.Linq.Enumerable.Union [TSource](IEnumerable 1 first, IEnumerable 1秒)at at   DotSpatial.Controls.AppManager.d__9.MoveNext()   在c:\ dev \ DotSpatial \ DotSpatial.Controls \ Extensions \ AppManager.cs:line   581在DotSpatial.Controls.AppManager.GetCatalog()中   C:\ dev的\ DotSpatial \ DotSpatial.Controls \扩展\ AppManager.cs:行   563在DotSpatial.Controls.AppManager.LoadExtensions()中   C:\ dev的\ DotSpatial \ DotSpatial.Controls \扩展\ AppManager.cs:行   在C:\ Users \ Logan B中的DemoMap.MainForm..ctor()中的329。   Lehman \ Documents \ DemoMap \ DemoMap \ MainForm.cs:第230行   C:\ Users \ Logan B中的DemoMap.Program.Main()。   Lehman \ Documents \ DemoMap \ DemoMap \ Program.cs:第13行at   System.AppDomain._nExecuteAssembly(RuntimeAssembly程序集,String []   args)在System.AppDomain.ExecuteAssembly(String assemblyFile,   证据assemblySecurity,String [] args)at   Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
  在System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
  在System.Threading.ExecutionContext.Run(ExecutionContext   executionContext,ContextCallback回调,对象状态,布尔值   ignoreSyncCtx)at   System.Threading.ExecutionContext.Run(执行上下文   executionContext,ContextCallback回调,对象状态)at   System.Threading.ThreadHelper.ThreadStart()

对这里发生的事情有任何想法吗? * 非常感谢 *

3 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:0)

Directories属性为null,找出原因。

答案 2 :(得分:0)

用另外一行代码写这个,你计算目录列表,使代码更清晰,更好! 你确定你正确使用联盟吗?像AUnionB = A.Union(B)??在你的代码中不清楚。