我目前正在使用DotSpatial库.NET (地理信息系统库)。我的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
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()
知道这里发生了什么吗?*我会非常感激的*
发布于 2012-02-07 23:23:18
我猜“目录”是空的。从代码片段中还不清楚应该将其设置在何处,但在本例中没有设置。由于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-07 23:20:13
Directories属性为null,找出原因。
发布于 2012-02-07 23:26:11
用多一行代码来编写这段代码,在其中计算目录列表,以使代码更加清晰,恳求!
你确定你在正确地使用工会吗?比如AUnionB= A.Union(B)?你的代码不清楚。
https://stackoverflow.com/questions/9185532
复制相似问题