2012-02-07 75 views
1

我目前使用.NET(GIS庫)的DotSpatial庫。我在我的AppManager類中出現錯誤。該AppManager的是管理擴展(包括數據提供商)的加載一個組件,並與文件系列化幫助:ArgumentNullException未處理 - 值不能爲空。參數名稱:第一個

代碼處於的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程序

堆棧跟蹤

在在 DotSpatial.Controls System.Linq.Enumerable.Union [TSource](IEnumerable的1 first, IEnumerable 1秒)。 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()in c:\ dev \ DotSpatial \ DotSpatial.Controls \ Extensions \ AppManager.cs: 329在DemoMap.MainForm..ctor()在C:\ Users \ Logan B.在C:\ Users \ Logan B中的DemoMap.Program.Main()。 Lehman \ Documents \ DemoMap \ DemoMap \ Program.cs:line 13 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args)at System .AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity,String [] args)at Microsoft.Vis ualStudio.HostingProcess.HostProc.RunUsersAssembly()
在System.Threading.ThreadHelper.ThreadStart_Context(對象狀態)
在System.Threading.ExecutionContext.Run(的ExecutionContext 的ExecutionContext,ContextCallback回調,對象的狀態,布爾 ignoreSyncCtx)在 System.Threading.ExecutionContext.Run(執行上下文 的ExecutionContext,ContextCallback回調,對象狀態)在 System.Threading.ThreadHelper.ThreadStart()

什麼是怎麼回事任何想法? * 它將不勝感激 *

+0

首先是foreach還是second? – John3136 2012-02-07 23:22:00

回答

2

我的猜測是'目錄'爲空。從代碼片段中不清楚應該設置爲,但在這種情況下,它沒有被設置。該錯誤是因爲聯盟的實現方式有點神祕:它是一個擴展方法,所以在幕後的實際調用是:

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) 

但是一個更好的解決將是進入該目錄設置代碼,並確保它」寫老是設定值...

+0

丹尼爾,非常感謝。當我去設置目錄(在DotSpatial.Controls.AppManager屬性中)時,它會返回一個錯誤,「找不到類型爲」System.String「的構造函數。」 不幸的是,在這個時候,因爲這個原因它不能有價值。如果我能解決這個錯誤,那麼這應該不成問題。 – 2012-02-08 00:03:26

+0

只是爲了確保以某種方式優雅地處理空'目錄'。我編輯了回覆以包含另一個可能的修復。 – Daniel 2012-02-08 01:56:03

0

Directories屬性爲空,找出原因。

0

這種情況的發生,你計算的目錄列表,使代碼更清晰的一行代碼,pleaaaase!
你確定你正在使用工會嗎?像AUnionB = A.Union(B)??在你的代碼中不清楚。

相關問題