ArgumentNullException не обработано - значение не может быть нулевым.Имя параметра: первый - PullRequest
1 голос
/ 08 февраля 2012

В настоящее время я использую библиотеку 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

в System.Linq.Enumerable.Union [TSource] (IEnumerable 1 first, IEnumerable 1 секунда) в DotSpatial.Controls.AppManager.d__9.MoveNext () в c: \ dev \ DotSpatial \ DotSpatial.Controls \ Extensions \ AppManager.cs: строка 581 в DotSpatial.Controls.AppManager.GetCatalog () в C: \ DEV \ DotSpatial \ DotSpatial.Controls \ Extensions \ AppManager.cs: линия 563 в DotSpatial.Controls.AppManager.LoadExtensions () в C: \ DEV \ DotSpatial \ DotSpatial.Controls \ Extensions \ AppManager.cs: линия 329 в DemoMap.MainForm..ctor () в C: \ Users \ Logan B. Lehman \ Documents \ DemoMap \ DemoMap \ MainForm.cs: строка 230 в DemoMap.Program.Main () в C: \ Users \ Logan B. Lehman \ Documents \ DemoMap \ DemoMap \ Program.cs: строка 13 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, String [] аргументы) в System.AppDomain.ExecuteAssembly (String assemblyFile, Свидетельство сборкиSecurity, String [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта)
в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, ContextCallback обратный вызов, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart ()

Есть идеи о том, что здесь происходит? * Было бы более чем признательно *

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

Я думаю, что «Каталоги» - ноль.Из фрагмента кода неясно, где должно быть установлено , но в этом случае оно не устанавливается.Ошибка немного загадочна из-за способа реализации 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)

Но лучшим решением было бы перейти к коду, который устанавливает каталоги, и убедиться, что он всегда устанавливаетзначение ...

0 голосов
/ 08 февраля 2012

напишите это еще с одной строкой кода, где вы вычисляете список каталогов, чтобы сделать код более понятным, pleaaaase!
Вы уверены, что правильно используете union? как AUnionB = A.Union (B) ?? Непонятно в вашем коде.

0 голосов
/ 08 февраля 2012

Свойство Directories имеет значение null, выясните, почему это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...