我有一个List和一个ListItemCollection,想要检查是否有相同的元素。
首先,我使用Text和Value填充ListItemCollection。 (在SQL选择之后)
ListItemCollection tempListName = new ListItemCollection();
ListItem temp_ListItem;
if (reader.HasRows)
{
while (reader.Read())
{
temp_ListItem = new ListItem(reader[1].ToString(), reader[0].ToString());
tempListName.Add(temp_ListItem);
}
}
我有List
List<string> tempList = new List<string>(ProfileArray);
有一些值,如{“1”,“4”,“5”,“7”}
现在,我想检查一下,如果tempList可能有一些在tempListName中具有相同值的元素,并从值adn中读取文本,请将其写入新列表。
注意:我使用的是asp.net 2.0。
答案 0 :(得分:4)
List.FindAll
已在C#2.0中提供:
List<string> newList = tempList.FindAll(s => tempListName.FindByText(s) != null);
ListItemCollection.FindByText
:
使用FindByText方法在集合中搜索ListItem Text属性,等于text参数指定的文本。这个 方法执行区分大小写和文化不敏感的比较。 此方法不执行部分搜索或通配符搜索。如果 使用此条件在集合中找不到项目, null为 返回强>
答案 1 :(得分:1)
真正简单的解决方案,您可以根据自己的需要进行自定义和优化。
List<string> names = new List<string>(); // This will hold text for matched items found
foreach (ListItem item in tempListName)
{
foreach (string value in tempList)
{
if (value == item.Value)
{
names.Add(item.Text);
}
}
}
答案 2 :(得分:0)
因此,对于一个真实的简单示例,请考虑以下内容:
List<string> tempTextList = new List<string>();
while (reader.Read())
{
string val = reader[0].ToString(),
text = reader[1].ToString();
if (tempList.Contains(val)) { tempTextList.Add(text); }
temp_ListItem = new ListItem(text, val);
tempListName.Add(temp_ListItem);
}
现在,只是列出一些文本值对你来说不是很好,所以让我们稍微改进一下:
Dictionary<string, string> tempTextList = new Dictionary<string, string>();
while (reader.Read())
{
string val = reader[0].ToString(),
text = reader[1].ToString();
if (tempList.Contains(val)) { tempTextList.Add(val, text); }
temp_ListItem = new ListItem(text, val);
tempListName.Add(temp_ListItem);
}
现在,您可以从字典中找到特定值的文本。您甚至可能希望在更高的范围内声明Dictionary<string, string>
并在其他地方使用它。如果您要在更高的范围内声明它,您只需更改一行,即:
Dictionary<string, string> tempTextList = new Dictionary<string, string>();
到此:
tempTextList = new Dictionary<string, string>();
答案 3 :(得分:0)
var resultList = new List<string>();
foreach (string listItem in tempList)
foreach (ListItem listNameItem in tempListName)
if (listNameItem.Value.Equals(listItem))
resultList.Add(listNameItem.Text);