关于在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
    }

关于在c#中处理数组的问题

我认为您需要使用一个通用版本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这件事也毫无用处。