#c# #asp.net #collections #arraylist
#c# #asp.net #Коллекции #список массивов
Вопрос:
Я создал статическую функцию, которая возвращает мне список массивов объектов:
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
}
Ответ №1:
Я думаю, что вам нужно использовать универсальную версию, List<T>
где T
был бы тип AllQuestionsPresented
. Это должно включить IntelliSense для вас, как вы ожидаете.
Можете ли вы опубликовать определение для AllQuestionsPresented
?
Комментарии:
1. Это класс со свойствами .. например, общедоступное строковое имя, общедоступная строковая фамилия, общедоступный возраст .. ничего важного
Ответ №2:
ИСПОЛЬЗУЙТЕ список:
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;
}
Ответ №3:
ArrayList содержит только коллекции объектов; вам пришлось бы привести allThread[i] к представленному allquestions’у.
Вы могли бы рассмотреть возможность использования универсальных коллекций, но вам, вероятно, придется немного реорганизовать свою архитектуру, чтобы справиться с этим.
Комментарии:
1. оооо, я понимаю .. я бы лучше прибегнул к ArrrayList
Ответ №4:
1) Список массивов содержит объекты, поэтому к свойству объекта можно получить доступ без приведения объекта.
Наличие словаря, полного объектов, в некотором роде бессмысленно, я бы привел объекты к типу, который действительно полезен и обладает нужными вам свойствами. Для этого потребуется изменить способ работы вашего оператора select.
Честно говоря, нет необходимости в ArrayList, вы можете написать оператор select, чтобы заполнить коллекцию, которую вы хотите использовать instad.
Ответ №5:
Или используйте 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);
Ответ №6:
Зачем использовать ArrayList? Вы могли бы просто использовать гораздо более подходящий
List<objecttype here>
С помощью этой структуры данных вы можете получить доступ ко всему так, как вы хотите (с квадратными скобками). Даже функция ICollection совершенно бесполезна.