1

現在、.NET用のDotSpatialライブラリ(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

最初

ソース

System.Core

スタックトレース

System.Linq.Enumerable.Union [TSource](IEnumerable1 first, IEnumerable1秒)c:\ dev \ DotSpatial \ DotSpatial.Controls \ Extensions \ AppManager.cs:line 581のDotSpatial.Controls.AppManager.d__9.MoveNext()のc:\ devのDotSpatial.Controls.AppManager.GetCatalog() \ DotSpatial \ DotSpatial.Controls \ Extensions \ AppManager.cs:line 563 at DotSpatial.Controls.AppManager.LoadExtensions()in c:\ dev \ DotSpatial \ DotSpatial.Controls \ Extensions \ AppManager.cs:line 329atDemoMap.MainForm。 .ctor()in C:\ Users \ Logan B. Lehman \ Documents \ DemoMap \ DemoMap \ MainForm.cs:line 230 at DemoMap.Program.Main()in C:\ Users \ Logan B. Lehman \ Documents \ DemoMap \ Microsoft.VisualStudio.HostingProcessのSystem.AppDomain.ExecuteAssembly(String assemblyFile、Evidence assemblySecurity、String [] args)のSystem.AppDomain._nExecuteAssembly(RuntimeAssembly assembly、String [] args)のDemoMap \ Program.cs:line13。HostProc.RunUsersAssembly()
System.Threading.ThreadHelper.ThreadStart_Context(オブジェクト状態)
at System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態、ブール値ignoreSyncCtx)at System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態)System.Threading.ThreadHelper.ThreadStart()で

ここで何が起こっているのかについて何か考えはありますか?*それはありがたいです*

4

3 に答える 3

2

私の推測では、「ディレクトリ」はnullです。コードスニペットからそれをどこに設定すべきかは明確ではありませんが、この場合は設定されていません。Unionの実装方法のため、エラーは少しわかりにくいです。これは拡張メソッドであるため、実際の呼び出しは次のようになります。

IEnumerableExtensions.Union(IEnumerable first, IEnumerable second)

ディレクトリが何であるかに応じて、foreachの前に1つの簡単な修正があります:

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-07T23:23:18.883 に答える
0

これをもう1行のコードで記述し、ディレクトリのリストを計算してコードをより明確にします。
ユニオンを正しく使用していますか?AUnionB = A.Union(B)のように?? コードが明確ではありません。

于 2012-02-07T23:26:11.423 に答える
0

プロパティが null です。そのDirectories理由を調べてください。

于 2012-02-07T23:20:13.593 に答える