ArgumentNullException未处理-值不能为null.参数名称:第一个

本文关键字:参数 第一个 null 未处理 不能 ArgumentNullException | 更新日期: 2023-09-27 18:23:35

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

ParamName

第一个

来源

系统核心

StackTrace

位于System.Linq.Enumerable.Union[TSource](IEnumerable 1 first, IEnumerable 1秒)DotSSpatial.Controls.AppManager.d_9.MoveNext()在c:''dev''DotSpatial''DotSpational.Controls''Extensions''AppManager.cs:line中581,位于c: ''dev''DotSpatial''DotSpational.Controls''Extensions''AppManager.cs:line563,位于中的DotSpacel.Controls.AppManager.LoadExtensions()c: ''dev''DotSpatial''DotSpational.Controls''Extensions''AppManager.cs:line329,位于C:''Users''Logan B中的DemoMap.MainForm.ctor()。Lehman''Documents''DemoMap''DemoMap''MainForm.cs:line 230C:''Users''Logan B.中的DemoMap.Program.Main()。Lehman''Documents''DemoMap''DemoMap''Program.cs:line 13 atSystem.AppDomain_nExecuteAssembly(RuntimeAssembly程序集,String[]args)(字符串assemblyFile,处的Evidence assemblySecurity,String[]args)Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
位于System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
在System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallback回调,对象状态,布尔值ignoreSyncCtx)System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallback回调、对象状态)System.Threading.ThreadHelper.ThreadStart()

知道这里发生了什么吗*非常感谢*

ArgumentNullException未处理-值不能为null.参数名称:第一个

我的猜测是"目录"为null。从代码片段中还不清楚应该设置在哪里,但在本例中没有设置。由于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)

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

Directories属性为空,请找出原因。

再写一行代码,计算目录列表,使代码更加清晰,pleaaase
你确定你正确使用工会吗?比如AUnionB=A.并集(B)??代码中不清楚。