Как передать строковое значение "gdbFullName" из открытого класса "salida" в строку "fcName"? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь установить имя выхода по умолчанию для shp. файл. Для этого я должен передать переменную gdbFullValue из открытого класса salida в String fcName, чтобы выходные данные включали код активации в окончательное имя.

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

   class Salida
{
    ShapefileManage _shpManageOutput;
    IFeatureClass _outpuFc;
    public String _gdbName;
    public String gdbFullName;
    public Salida(ShapefileManage shpManageOutput, ISpatialReference spatialReference, String gdbName)
    {
        this._shpManageOutput = shpManageOutput;
        this.crearCapaSalida(spatialReference, esriGeometryType.esriGeometryPoint);
        this._gdbName = gdbName;
        string gdbFullName = gdbName.Substring(gdbName.LastIndexOf("/") + 1);
    }

    private string fcName = string.Format("PositionalAccuracySamplePoints" + "_" + "{0}", gdbFullName.Substring(0, 14));
    public string returnOutputName()
    { return fcName; }

Я получаю пустую строку NullReferenceValue или просто строку gdbFullName и, следовательно, окончательный выводname включает только статическую часть строки fcName.

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

Ответы [ 2 ]

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

Спасибо за ваш совет. Правда в том, что я не думаю, что показал то, что должен был показать в посте:

Общественный класс salida инстанцируется в другом классе. Поэтому все, что мне нужно было сделать, - это установить значение fcName для расчета при создании экземпляра класса, а не снаружи. Я оставляю здесь код, который работает.

class Salida
{
    string _gdbName;
    ShapefileManage _shpManageOutput;
    IFeatureClass _outpuFc;
    //ISpatialReference spatialReference;


    public Salida(ShapefileManage shpManageOutput, ISpatialReference spatialReference, string gdbName)
    {
        this._gdbName = gdbName;
        this._shpManageOutput = shpManageOutput;
        crearCapaSalida(spatialReference, esriGeometryType.esriGeometryPoint);
    }

А в другом классе, где основной процесс может быть найден, где я создаю экземпляр класса salida с фактическим значением fcName;

// Instanciamos los objetos gdbManage and shpManage
            gdbManageInput = new GeodatabaseManage(_inputGdbPath);
            shpManageOutput = new ShapefileManage(_outputPath);

            // Instanciamos la clase salida, pasandole el spatialReference del dataset.
            IFeatureDataset fd = gdbManageInput.getFeatureDataset(_featureDataset);
            ISpatialReference spatialReference = (fd as IGeoDataset).SpatialReference;
            string gdbName = _inputGdbPath.Substring(_inputGdbPath.LastIndexOf('\\') + 1);
            string last14gdbName = gdbName.Substring(0, 14);
            string nombreSalida = "PositionalAccuracyPoints_" + last14gdbName;
            salida = new Salida(shpManageOutput, spatialReference, nombreSalida);

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

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

Вы пытаетесь извлечь код активации из gdbFullName до его установки. Обратите внимание, что fcName является приватным полем, которое инициируется до запуска вашего конструктора.

Почему бы вам не поместить создание имени файла в метод returnOutputName?

...