Как сделать имя выходного файла комбинацией gdbName и строки констант? - PullRequest
0 голосов
/ 06 ноября 2019

При разработке кнопки я хочу, чтобы выходной файл, сгенерированный этой кнопкой, имел предварительно определенное имя, состоящее из строки констант «PositionalAccuracySamplePoints» и строки переменных, состоящей из первых 15 символов моего имени GDB.

Я новичок в кодировании и пытаюсь понять, что я делаю неправильно, когда пытаюсь вызвать переменную gdbName. Я действительно считаю, что это связано со значением _gdbName, которое я определяю вне метода, которое не получает значение подстроки, заданное внутри метода.

    private static String _inputGdbPath = ("C:\\Users\\GMartin\\Documents\\Entorno pruebas\\Datos_SEA\\SEA19_0308_07C_20190513.gdb");
    public static String _gdbName;

    public Salida(String gdbName)
    {

        GeodatabaseManage gdbManageInput = new GeodatabaseManage(_inputGdbPath);
        gdbName = _inputGdbPath;
        _gdbName = gdbName.Substring(gdbName.LastIndexOf('\\') + 15);

    }


    public string fcName = String.Format("PositionalAccuracySamplePoints" + " _ " + "{0}", _gdbName);

С этим кодом я получаю исключение NullValueReference, как уже упоминалось, связано с тем, что _gdbName последней строки получает не значение de _gdbName изнутри, а пустое значение String.

Заранее спасибо

1 Ответ

0 голосов
/ 06 ноября 2019

Кажется, с вашим кодом есть некоторые проблемы. Вот то, что я вижу, основываясь на том, что вы делитесь.

  1. Переменная _inputGdbPath никогда не назначается.
  2. Вы выполняете логику внутри конструктора с помощью кнопки. Он ожидает строку gdbName, которую вы заменяете на _inputGdbPath, которая, как сказано в пункте 1, никогда не назначается.
  3. Вы пытаетесь получить GeodatabaseManage на основе _inputGdbPath,который никогда не используется и может вернуть некоторую нулевую ссылку, так как _inputGdbPath равен нулю.
  4. Ваша последняя строка внутри конструктора делает _gdbName = gdbName.Substring(15). gdbName - это полученный параметр, который теперь заменяется (нулевым) _inputGdbPath. Если вам просто нужен этот параметр, вы можете удалить оставшуюся часть кода в конструкторе и оставить только эту строку.
  5. Вы используете статические переменные. Это не рекомендуется, поскольку каждая кнопка будет пытаться использовать одни и те же _inputGdbPath и gdbName.
  6. Еще один момент, но, скорее, в качестве улучшения, вы можете создать свойство с private set и назначитьзначение непосредственно внутри конструктора. Таким образом, приложение не будет выполнять конкатенацию строки каждый раз, когда вы пытаетесь ее получить. И вы наверняка сможете улучшить формат строки.
public string FcName { get; private set; }

public Salida(string gdbName)
{
    //GeodatabaseManage gdbManageInput = new GeodatabaseManage(_inputGdbPath);
    //gdbName = _inputGdbPath;
    //_gdbName = gdbName.Substring(15);
    FcName = string.Format("PositionalAccuracySamplePoints_{0}", gdbName.Substring(15));
}
...