Вопрос о работе с Arraylists в C # - PullRequest
1 голос
/ 07 июня 2011

Я сделал статическую функцию, которая возвращает мне ArrayList объектов:

 allThread =(ArrayList) AllQuestionsPresented.GetAllThreads();

Теперь у объектов есть свойства, которые я хочу получить. Но я заметил, что я не могу набрать allThreads.Name ... или allThreads ["Name"] или allThreads [1], это не даст мне сам объект. Потому что intellisense не распознает его ..

Вот что я пытаюсь сделать ..:

Эта функция в одном классе:

    public static ICollection GetAllThreads()
{
    ArrayList allThreads = new ArrayList();
    string findUserID = "SELECT UserID FROM Users";
    string myConnectionString = AllQuestionsPresented.connectionString;

    using (SqlConnection myConnection = new SqlConnection(myConnectionString))
    {
        SqlCommand sqlCommand = new SqlCommand(findUserID, myConnection);
        SqlDataReader reader = sqlCommand.ExecuteReader();
        while (reader.Read())
        {
            AllQuestionsPresented allQ = new AllQuestionsPresented((Guid)reader["UserID"]);
            allThreads.Add(allQ);
        }
    }
    return allThreads;
}

Это код из другой функции в другом классе:

    forumsPages = new Dictionary<int, List<DisplayAllQuestionsTable>>();
    allThread =(ArrayList) AllQuestionsPresented.GetAllThreads();//I want to convert the ICollection


    for (int i = 0; i < 20; i++)
    {
        threads.Add(new DisplayAllQuestionsTable(allThread[i].//And use it here. I want an object to be returned..same object that was stored in the ArrayList in the static function

    }

Ответы [ 6 ]

2 голосов
/ 07 июня 2011

Я думаю, что вам нужно использовать общую версию, List<T>, где T будет иметь тип AllQuestionsPresented.Это должно включить IntelliSense для вас, как вы ожидаете.

Можете ли вы опубликовать определение для AllQuestionsPresented?

1 голос
/ 07 июня 2011

Или используйте LINQ

[Table(Name="Users")]
class User
{
   [Column]
   public Guid UserId;
}  

IEnumerable<User> questions;
using (SqlConnection myConnection = new SqlConnection(myConnectionString))
{
    var dc = new DataContext(myConnection);
   // Use ToArray to force all reads on the connection
    questions = 
        (from user in dc.GetTable<User>() 
        select new AllQuestionsPresented(user.UserId)).ToArray()
}

var threads = 
       from question in questions 
       select new DisplayAllQuestionsTable(question.SomeProperty);

Или, если вы садист

var threads = 
       from question in (
            from user in dc.GetTable<User>() 
            select new AllQuestionsPresented(user.UserId) )
       select new DisplayAllQuestionsTable(question.SomeProperty); 
1 голос
/ 07 июня 2011

1) ArrayList содержит объекты, поэтому к свойству объекта можно обращаться без приведения объекта.

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

Честно говоря, ArrayList не нужен, вы можете написать оператор select, чтобы заполнить коллекцию, которую хотите использовать в instad.

1 голос
/ 07 июня 2011

ИСПОЛЬЗУЙТЕ Список:

 public static List<AllQuestionsPresented> GetAllThreads()
{
    List<AllQuestionsPresented> allThreads = new List<AllQuestionsPresented>();
    string findUserID = "SELECT UserID FROM Users";
    string myConnectionString = AllQuestionsPresented.connectionString;

using (SqlConnection myConnection = new SqlConnection(myConnectionString))
    {
        SqlCommand sqlCommand = new SqlCommand(findUserID, myConnection);
        SqlDataReader reader = sqlCommand.ExecuteReader();
        while (reader.Read())
        {
            AllQuestionsPresented allQ = new AllQuestionsPresented((Guid)reader["UserID"]);
            allThreads.Add(allQ);
        }
    }
    return allThreads;
}
1 голос
/ 07 июня 2011

ArrayList содержит только коллекции объектов;вам придется преобразовать allThread [i] в ​​AllQuestionsPresented.

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

0 голосов
/ 07 июня 2011

Зачем использовать ARRAYlist? Вы можете просто использовать гораздо лучше подходит

   List<objecttype here>

С этой структурой данных вы можете получить доступ ко всему, что вы хотите (в квадратных скобках). Даже вещь ICollection совершенно бесполезна.

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