2011-06-20 95 views
1

我正在處理一些遺留代碼,所以在這裏不能使用通用列表。我有一個ArrayList從數據層方法返回。最後每個項目由一個ID和一個說明字段組成。我想循環訪問ArrayList並在Description字符串上搜索匹配項 - 任何想法?正在搜索一個ArrayList

格式

ID DESCRIPTION 
1  SomeValue 

我知道我能做到這一點:

bool found = false; 
if (arr.IndexOf("SomeValue") >= 0) 
{ 
    found = true;  
} 

但是,有沒有辦法做一個字符串比較特定說明價值?

UPDATE

修訂西雅圖獾的回答版本:

for (int i = 0; i < arr.Count; i++) 
{ 
    if (arr[i].ToString() == "SomeValue") 
    { 
     // Do something 
     break; 
    } 
} 
+0

因此,這段代碼不能使用Linq的對象? –

+0

這是正確的... – IrishChieftain

+0

可能重複的[ArrayList Search .net](http://stackoverflow.com/questions/2098019/arraylist-search-net) –

回答

1

我可能在你的問題中遺漏了一些東西,因爲這看起來很直截了當。但後來我很老派......

這是否對您有幫助?

protected void Page_Load(object sender, EventArgs e) 
{ 
    ArrayList arrSample = new ArrayList(); 

    // populate ArrayList 
    arrSample.Items.Add(0, "a"); 
    arrSample.Items.Add(1, "b"); 
    arrSample.Items.Add(2, "c"); 

    // walk through the length of the ArrayList 
    for (int i = 0; i < arrSample.Items.Count; i++) 
    { 
     // you could, of course, use any string variable to search for. 
     if (arrSample.Items[i] == "a") 
      lbl.Text = arrSample.Items[i].ToString(); 
    } 
} 

正如我所說,不知道我是否在你的問題中遺漏了某些東西。 獾

+0

標記爲答案..我稍微調整了代碼,因爲ArrayList沒有Items屬性...請參閱原始帖子中的更新。謝謝! :-) – IrishChieftain

2
bool found = false; 
foreach (Item item in arr) 
{ 
    if ("Some Description".Equals (item.Description, StringComparison.OrdinalIgnoreCase)) 
    { 
     found = true; 
     break; 
    } 
} 
+0

出於某種原因,沒有爲ArrayList的Item屬性獲取intellisense。我正在使用System.Collections指令 - 這是一個庫類... – IrishChieftain

+0

你的數組中有什麼樣的對象?我上面的代碼假定類型是'Item',但是你可以用類名替換Item。 –

+0

它是從SPROC返回的ArrayList。每個對象由一個ID和Description域組成。也許作者應該使用一個DataSet?無論哪種方式,我堅持與ArrayList。嘗試替代對象,但得到「對象不包含描述的定義」錯誤消息... – IrishChieftain

0
foreach(object o in arrayList) 
{ 
    var description = o.GetType().GetProperty("Description").GetValue(o, null); 
    if("some description".Equals(description)) 
    { 
     //do something 
    } 

} 
0

你肯定你不能使用LINQ?你運行的是什麼版本的框架?

僅僅因爲這不是一個泛型類型並不意味着你不能這樣做。考慮arr.Cast(YourType).Where(...)。

+1

它被標記爲'.net-1.1',LINQ不存在它。泛型也不是擴展方法。 – vcsjones

+0

ooohhh,1.1。很抱歉聽到!:)檢查agent-j的答案,應該這樣做。 – mtazva

0

如果您有一個ArrayList,請嘗試ArrayList的「Contains」或「BinarySearch」內置函數。

protected void Page_Load(object sender, System.EventArgs e) 
    { 
    ArrayList alArrayList = new ArrayList(); 
    alArrayList.Insert(0, "a"); 
    alArrayList.Insert(1, "b"); 
    alArrayList.Insert(2, "c"); 
    alArrayList.Insert(3, "d"); 
    alArrayList.Insert(4, "e"); 

    //Use Binary Search to find the index within the array 
    if (alArrayList.BinarySearch("b") > -1) { 
      txtTemp.Text += "Binary Search Array Index: " + alArrayList.BinarySearch("b").ToString; 
    } 

    //Alternatively if index not needed use Contains function 
    if (alArrayList.Contains("b")) { 
      txtTemp.Text += "Contains Output: " + alArrayList.Contains("b").ToString; 
    } 
}