C # / ASP.net: список повторно инициализирован необъяснимым образом - PullRequest
1 голос
/ 28 марта 2012

Я начинаю разработку веб-приложения на C # / ASP.net, в котором я использую Entity Framework (Microsoft ORM).

Моя проблема очень проста: в файле default.aspx.csУ меня есть это:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace Projet___TestConnaissances
{
    public partial class _Default : System.Web.UI.Page
    {
        protected List<Theme> lt = new List<Theme>();
        protected List<int> li = new List<int>();
        protected Theme th = new Theme();
        protected String test = "teeeest";
        protected int v = 1;

        protected void Page_Load(object sender, EventArgs e)
        {
            DataSourceContainer bdd = new DataSourceContainer();
            var requete = from Theme in bdd.ThemeSet select Theme;
            List<Theme> lt = requete.ToList(); // gets a list of themes
            v = lt.Count(); // puts in v the number of themes in lt
            th = lt.First(); // variable containing a unique theme (first of lt)
            test = "Ceci est un test";
            li.Add(1);
            li.Add(2);
            li.Add(3);
        }
    }
}

И в моем default.aspx я отображаю это:

<p>
<br />test : <%= test %>
<br />v :  <%= v %>
<br />th.libelle : <%= th.libelle %>
<br />lt.count : <%= lt.Count() %>
<br />li.count : <%= li.Count() %>
</p>

В результате у меня есть:

test : Ceci est un test
v : 3
th.libelle : Test ajout libelle
lt.count : 0
li.count : 3

КакВы можете видеть, что мой Список тем необъяснимо повторно инициализирован перед его отображением.Что странно, так это то, что мой List of int хорошо хранится, а также переменная, содержащая уникальную тему.

Класс Theme, созданный с помощью Entity Designer, возможно, в этом и заключается отличие от List of int.?

Заранее спасибо тем, кто поможет мне разобраться, что там происходит.Пока!

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Ваш Page_Load метод объявляет новую переменную с именем lt. Он ничего не назначает переменной instance , потому что локальная переменная затеняет переменную экземпляра. Итак, это:

List<Theme> lt = requete.ToList();

должно быть так:

lt = requete.ToList();

Я бы также предложил использовать более значимые имена переменных:)

0 голосов
/ 28 марта 2012

Вы переопределяете переменную в области видимости метода в page_load;

List<Theme> lt = requete.ToList(); // gets a list of themes

вместо использования;

lt = requete.ToList(); // gets a list of themes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...