我正在開發一個使用員工串列的程式:
List<Employee> emp = new List<Employee>();
emp.Add(new Employee("Bran", 2500));
emp.Add(new Employee("Mike", 1500));
emp.Add(new Employee("Isaac", 1000));
emp.Add(new Employee("Patrick", 100));
emp.Add(new Employee("Spongebob", 2000));
emp.Add(new Employee("Spongegar", 1200));
我正在使用 linq 進行查詢,我想做一個順序搜索,所以我輸入:
Console.WriteLine("\nResults of sequential search ");
Employee em = null; //flag
string name = "Spo";
int i;
var match = from e in emp
where e.Name.StartsWith(name)
select e;
em = match.FirstOrDefault();
i = emp.IndexOf(em);
MoreEmployee();
if (match.Any())
{
for (int x =0; x < emp.Count; x )
{
Console.WriteLine((x 1) ". " em.Name " " em.Salary.ToString("C") " " em.AnnualSal.ToString("C"));
}
}
else
{
Console.WriteLine("Employee Not found");
}
這個輸出給了我 6 次 Songebob 而不是 Songebob 和 Spongegar,我做錯了什么?我如何讓它正確地迭代?
uj5u.com熱心網友回復:
正在em = match.FirstOrDefault();獲取emSongebob。稍后您的 for 回圈將迭代 6 次,列印它。它應該是
if (match.Any())
{
var x = 1;
foreach (var empl in match)
{
Console.WriteLine(x ". " empl.Name " "
empl.Salary.ToString("C") " " empl.AnnualSal.ToString("C"));
}
}
else
{
Console.WriteLine("Employee Not found");
}
uj5u.com熱心網友回復:
嘗試這個:
List<Employee> emp = new List<Employee>();
emp.Add(new Employee("Bran", 2500));
emp.Add(new Employee("Mike", 1500));
emp.Add(new Employee("Isaac", 1000));
emp.Add(new Employee("Patrick", 100));
emp.Add(new Employee("Spongebob", 2000));
emp.Add(new Employee("Spongegar", 1200));
string name = "Spo";
var match= emp.Where(y => y.Name.StartsWith(name)).ToList();
if (match.Any())
{
for (int x = 0; x < match.Count; x )
{
Console.WriteLine((x 1) ". " match[x].Name " "
match[x].Salary.ToString("C") " " match[x].AnnualSal.ToString("C"));
}
}
else
{
Console.WriteLine("Employee Not found");
}
希望這可以幫助...
uj5u.com熱心網友回復:
正如@DotNet Developer 所說,您的回圈“在相同的值上”迭代了 6 次——海綿寶寶。問題是您在For回圈中參考了錯誤的計數。您已從原始emp串列中找到正確員工“海綿寶寶”的索引,但您不再參考該值。它們也是結果集中的第一個,但您一遍又一遍地參考同一員工總共 6 次( 中的員工總數emp),但您的結果集中em僅包含 2 名員工。
不要使用For回圈,而是使用@DotNet Developer 的建議并Foreach在結果集上使用回圈,em并在回圈中參考此結果集的計數For-x < em.Count;然后使用串列位置訪問串列成員em[x].Name ...
或
嘗試這個您的代碼以查找匹配項并em在您的Console.Writeline陳述句中參考結果集:
Console.WriteLine("\nResults of sequential search ");
string name = "Spo";
List<Employee> em = emp.Where(e => e.Name.StartsWith(name)).ToList();
for (int x = 0; x < em.Count; x )
{
Console.WriteLine((x 1) ". " em[x].Name " " em[x].Salary.ToString("C") " " em[x].AnnualSal.ToString("C"));
}
/* or simplify accessing the list elements by using a Foreach loop */
Console.WriteLine("or, using a Foreach loop:");
int i = 0;
foreach (var employee in em)
{
Console.WriteLine(( i) ". " employee.Name " " employee.Salary.ToString("C") " " employee.AnnualSal.ToString("C"));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515622.html
標籤:C#列表林克收藏品
