所以我有一个List<T>
,其中类型T
是整数。现在我从一个使用SqlDataReader
读取我的数据库记录(DBMS:Sql Server)的函数中检索此列表。基本上我想要做的是检查如果列表说,返回以下内容:
1
7
4
我想对字符串列表(List <string> outcome = new List<string>()
)进行比较,其中:
1 = apples
7 = bananas
4 = oranges
最后将这些字符串添加到列表中,然后将它们绑定到我的C#Windows窗体应用程序中的ComboBox控件。
方法的问题是我使用if-condition
来检查整数(我从数据库中检索的)是否存在于初始列表中,在这种情况下我们可以调用List<int> checkInt = new List<int>()
)存在,如果是,则将字符串(Banana, apple, oranges or whatever
)添加到outcome
列表。
以下是实际代码:
public List<int> getSubGroupsBelongingToUser()
{
List<int> DepartmentSubGroupIds = new List<int>();
myConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (mySQLConnection = new SqlConnection(myConnectionString))
{
SqlParameter parameter = new SqlParameter("@UserId", getUserID(cbxSelectUser.Text));
mySQLCommand = new SqlCommand("Test", mySQLConnection);
mySQLCommand.CommandType = CommandType.StoredProcedure;
mySQLCommand.Parameters.Add(parameter);
mySQLConnection.ConnectionString = myConnectionString;
mySQLConnection.Open();
SqlDataReader sqlDataReader = mySQLCommand.ExecuteReader();
while (sqlDataReader.Read())
{
DepartmentSubGroupIds.Add(Convert.ToInt32(sqlDataReader["DepartmentSubGroupId"]));
}
}
return DepartmentSubGroupIds;
}
因此上面的函数将返回1 and 3
。我将其称为如下:
private List<string> getSubGroupPerID()
{
List<string> outcome = new List<string>();
if (getSubGroupsBelongingToUser().Contains(1))
{
outcome.Add("Apple");
}
else if (getSubGroupsBelongingToUser().Contains(2))
{
outcome.Add("Oranges");
}
else if (getSubGroupsBelongingToUser().Contains(3))
{
outcome.Add("Pineapples");
}
else
{
outcome.Add("All");
}
return outcome;
}
现在的问题是,一旦执行,编译器将检查if条件,如果它是真的,它将only
添加一个水果并完成执行(这正是if条件如何获得执行)。但我希望它检查所有.Contains(int)
,如果这些比较相遇,那么只在最后添加水果。我已经知道问题是什么,我使用if条件。在认识到上述内容后,如何才能得到我想要的结果?
注意:由于时间限制,我没有改变我的实际代码以匹配我给出的水果示例,但肯定你应该得到我想要完成的任务。
答案 0 :(得分:4)
您可以使用Dictionary
:
Dictionary<int, string> fruit = new Dictionary<int, string>();
fruit.Add(1, "Apple");
fruit.Add(2, "Oranges");
fruit.Add(3, "Pineapple");
private List<string> getSubGroupPerID()
{
List<string> outcome = new List<string>();
List<int> keys = getSubGroupsBelongingToUser();
if(keys.Count > 0)
{
foreach(int key in keys)
{
outcome.Add(fruit[key]);
}
}
else
{
outcome.Add("All");
}
return outcome;
}
如果您更喜欢使用的模式,问题是您if-else
那里。这意味着,如果第一个条件为真,则其他条件不会被检查。您只需使用if
即可解决此问题,然后检查是否添加了任何内容:
private List<string> getSubGroupPerID()
{
List<string> outcome = new List<string>();
if (getSubGroupsBelongingToUser().Contains(1))
{
outcome.Add("Apple");
}
if (getSubGroupsBelongingToUser().Contains(2))
{
outcome.Add("Oranges");
}
if (getSubGroupsBelongingToUser().Contains(3))
{
outcome.Add("Pineapples");
}
if(outcome.Count == 0)
{
outcome.Add("All");
}
return outcome;
}