Почему это всегда будет нулевое значение? - PullRequest
1 голос
/ 18 января 2012

Хорошо, я получил следующий класс, но элемент всегда пуст, когда я GetIstance(); Visual Studio показывает:

Field 'PageStyle.item' is never assigned to, and will always have its default value null

Как я могу решить эту проблему?Что я делаю неправильно?Есть ли лучший способ сделать то, что сделано ниже?

public class PageStyle
{

private static PageStyle _Instance = null;

// Instantiate variables relating to sitecore item paths.
Database webDB;
Sitecore.Data.Items.Item item;

// constructor
private PageStyle()
{
    if (webDB != null)
    {
        webDB = Sitecore.Configuration.Factory.GetDatabase("web");
        Sitecore.Data.Items.Item item = webDB.Items[StartItem];
    }
}

// Method that gets instance
public static PageStyle GetInstance()   
{       
    if (_Instance == null)          
    _Instance = new PageStyle();        
    return _Instance;   
}

private void InitializeWebDB()
{
   if (webDB == null)
   {
    webDB = Sitecore.Configuration.Factory.GetDatabase("web");
   }

}

private void InitializeStartItem()
{
    if (webDB != null)
    {
        item = webDB.Items[StartItem];
    }
}

public string StartItem
{
    get
    {
        return _startItem;
    }

    set
    {
        _startItem = value;
    }
}
}

Ответы [ 5 ]

3 голосов
/ 18 января 2012

Вы никогда не устанавливаете это значение.Вы можете думать , что вы делаете, но на самом деле вы устанавливаете только локальную переменную с тем же именем.Кроме того, вы проверяете переменную webDB на ненулевые значения в то время, когда она всегда равна нулю:

// constructor
private PageStyle()
{
    if (webDB != null)
    {
        webDB = Sitecore.Configuration.Factory.GetDatabase("web");
        Sitecore.Data.Items.Item item = webDB.Items[StartItem];
    }
}

Измените это на:

// constructor
private PageStyle()
{
    this.webDB = Sitecore.Configuration.Factory.GetDatabase("web");
    this.item = webDB.Items[StartItem];
}

I'mпри условии, что вам всегда нужен экземпляр базы данных, и что ваш if (webDB != null) был ошибкой.

2 голосов
/ 18 января 2012

Возможно, вы хотели назначить item в конструкторе:

private PageStyle()
{
    if (webDB != null)
    {
        webDB = Sitecore.Configuration.Factory.GetDatabase("web");
        this.item = webDB.Items[StartItem];
    }
}

Также убедитесь, что вы вызываете приватный метод InitializeWebDB где-нибудь, иначе переменная webDB также будет нулевой.

Как это:

private PageStyle()
{
    InitializeWebDB();

    if (webDB != null)
    {
        this.item = webDB.Items[StartItem];
    }
}
0 голосов
/ 28 сентября 2012

Возможно, размещение метода инициализации webDB вне класса и его статичность не повредят.В вашем коде вы дважды проверяете webDB на null, а также в методе GetDatabase ().

Вы можете кодировать эту часть следующим образом:

0 голосов
/ 18 января 2012

Вы не инициализируете его в конструкторе, создаете новую локальную переменную с тем же именем, используйте:

// constructor
private PageStyle()
{
    webDB = Sitecore.Configuration.Factory.GetDatabase("web");
    this.item = webDB.Items[StartItem];
}
0 голосов
/ 18 января 2012

У вас есть локальный экземпляр элемента в конструкторе, скрывающий поле уровня класса.

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