在Dictionary C#中使用foreach显示特定结果

时间:2013-06-16 12:43:02

标签: c#-4.0

我无法解决的问题是,当我搜索某个联系人时,如果找到该联系人,则需要该联系人作为唯一的输出,但它显示整个记录。我该怎么办?

这是我的代码

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();


    }
    }
}

1 个答案:

答案 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。 但这是你想要实现的目标。