我有一个Product
类型的列表。 。
public List<Product> products = new List<Product>();
。 。 。我想创建一个方法GetList(string theType)
,如果方法提供的List
参数与任何一个中的theType
字段匹配,它将使用Type
中的项填充数组。 List
中的对象。
我希望数组在返回时只包含所有与提供的theType
参数成功匹配的产品的名称。
public string[] GetList(string theType)
{
string[] theList = new string[10];
for(int i = 0; i < theList.Length; i++)
{
foreach (Product p in products)
{
if (p.Type.Equals(theType))
{
theList[i] = p.ProductName;
}
}
}
return theList;
}
这似乎不起作用。即使我能看到它。我太累了,不能这么想。
编辑:
我想用返回的theList
填充一个组合框。
有两个组合框。您必须在第一个中选择一个预设值以启用第二个预设值,然后在第二个中选择应该使用在combobox1中选择的类型的产品项目。我只对combobox1进行了一次事件处理:
private void combobox1_SelectedValueChanged(object sender, EventArgs e)
{
if (combobox1.Text != "")
{
combobox2.Enabled = true;
combobox2.Items.Clear();
if (combobox1.SelectedText.Equals("Dairy"))
{
// i try to display what the method has returned inside a messagebox, but it doesn't display it at all, the messagebox
string[] theList = client.GetList("dairy");
string theStringList = "";
for (int i = 0; i < theList.Length; i++)
{
theStringList += "\n" + theList[i];
}
MessageBox.Show(String.Format("{0}"), theStringList);
//combobox2.Items.AddRange(client.GetList("dairy"));
}
}
else
combobox2.Enabled = false;
}
答案 0 :(得分:6)
使用LINQ:
return products.Where(p => p.Type == theType).Select(p => p.ProductName).ToArray();
答案 1 :(得分:1)
由于您不知道有多少项匹配,请使用List<string>
而不是数组:
public IList<string> GetList(string theType)
{
List<string> matchingProductNames = new List<string>();
foreach (Product p in products)
{
if (p.Type == theType)
matchingProductNames.Add(p.ProductName);
}
return matchingProductNames;
}
这也可以通过Linq以更具表现力的方式(在我看来)完成:
string[] productNames = products.Where(p => p.Type == theType)
.Select(p => p.ProductName)
.ToArray();
您当前将文本内容显示为消息框的标题,因为它是MessageBox.Show
的第二个参数 - 因为您的第一个字符是换行符,但您将看不到任何强>:
MessageBox.Show(String.Format("{0}"), theStringList);
你可能意图写MessageBox.Show(string.Format("{0}", theStringList))
但是在这里首先使用string.Format
是没有意义的,因为你没有应用格式化,只需直接使用字符串:
string theStringList = string.Join("\n", client.GetList("dairy"));
MessageBox.Show(theStringList, "some caption");
答案 2 :(得分:1)
为什么要把它放在for循环中?
public List<String> GetList(string theType)
{
List<String> TheList = new List<String>();
foreach (Product p in products)
{
if (p.Type = theType))
{
theList.add(ProductName);
}
}
return theList;
}
然后进行编辑(填充组合框)
获取列表后应该使用foreach循环
List<String> iList = GetList("typenamehere")
foreach(string s in theList){
Combobox1.Add(s);
}
然后在选择更改时,您可以检查combobox.selecteditem.text
答案 3 :(得分:1)
public string[] GetList(String theType)
{
ArrayList theList = new ArrayList();
foreach (Product p in products)
{
if (p.GetType().ToString() == theType)
theList.Add(p.ProductName);
}
return theList.Cast<string>().ToArray();
}