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()
知道这里发生了什么吗*非常感谢*
我的猜测是"目录"为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)??代码中不清楚。