我无法解决的问题是,当我搜索某个联系人时,如果找到该联系人,则需要该联系人作为唯一的输出,但它显示整个记录。我该怎么办?
这是我的代码
namespace Telephone_Directory
{
class Program
{
public bool info()
{
Console.WriteLine("ENTER THE NAME TO BE SEARCHED");
Dictionary<string, uint> contact = new Dictionary<string, uint>();
contact.Add("usman", 03453648729);
contact.Add("Iqtiqa", 03159825052);
contact.Add("Aamir", 03343315412);
contact.Add("Ghous", 03323142783);
var items = from pair in contact
orderby pair.Value ascending
select pair;
string chk = Console.ReadLine();
if (contact.ContainsKey(chk))
{
foreach (KeyValuePair<string, uint> pair in contact)
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
} return true;
}
else
return false;
}
static void Main(string[] args)
{
Program ob =new Program();
bool a=ob.info();
if (a == true)
{
Console.WriteLine("Your contact is found successfully");
}
else
Console.WriteLine("Not found");
Console.ReadLine();
}
}
}
答案 0 :(得分:0)
您正在检查联系人是否可用,但您正在作为输出迭代整个集合。因此,您可以完全删除第一个查询(var item = ...),因为它没有任何效果,因为您没有在任何地方使用它。 我建议直接通过Dictionary Key来访问所有内容,就像这样
uint srchNumber;
contact.TryGetValue(chk, out srchNumber);
if (srchNumber != null)
Console.WriteLine("{0}: {1}", chk, srchNumber);
这将为您提供您想要的。 但我建议更改实现,因为如果你有多个具有相同名称的项目,则字典可能不是最佳的,因为它只允许你拥有一次每个键。相反,我建议使用像SortedList&gt;这样的东西。或列表&lt; ...&gt;。然后,您可以使用LINQ语句查询所有可能的结果,如
var results = from c in contact select c where c.key == chk
这将为您提供属于某个名称的所有Key-Value-Pairs。 但这是你想要实现的目标。