关于在c#中处理数组的问题
本文关键字:数组 问题 处理 | 更新日期: 2023-09-27 17:58:40
我做了一个静态函数,它返回对象的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
}
我认为您需要使用一个通用版本List<T>
,其中T
的类型为AllQuestionsPresented
。这应该如您所期望的那样为您启用IntelliSense。
你能发布AllQuestionsPresented
的定义吗?
使用列表:
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;
}
ArrayList只保存对象的集合;您必须将allThread[i]强制转换为AllQuestionsRepresent。
您可能会考虑使用通用集合,但可能需要对架构进行一些重构才能处理它。
1)ArrayList包含对象,因此可以在不强制转换对象的情况下访问对象的属性。
拥有一个充满对象的Dictionary有点毫无意义,我会将对象转换为实际有用的类型,并具有您想要的属性。这需要更改select语句的工作方式。
老实说,不需要ArrayList,您可以编写select语句,以填充您想要使用instad的集合。
或使用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);
为什么要使用ARRAYlist?你可以使用更合适的
List<objecttype here>
有了这个数据结构,你就可以随心所欲地访问所有内容(使用方括号)。即使是ICollection这件事也毫无用处。