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


    }
    }
}
4

1 回答 1

0

您正在检查联系人是否可用,但您正在迭代整个集合作为输出。因此,您可以完全删除第一个查询 (var item = ...),因为它没有任何效果,因为您没有在任何地方使用它。我建议像这样通过字典键直接访问所有内容

uint srchNumber;
contact.TryGetValue(chk, out srchNumber);
if (srchNumber != null)
    Console.WriteLine("{0}: {1}", chk, srchNumber);

这会让你得到你想要的。但是我建议更改实现,因为如果您将有多个具有相同名称的项目,字典可能不是最佳的,因为它只允许您拥有每个键一次。相反,我建议使用类似 SortedList> 或 List<...> 的东西。然后您可以使用 LINQ 语句查询所有可能的结果,例如

var results = from c in contact select c where c.key == chk

这将为您提供属于某个名称的所有键值对。但这取决于您要达到的目标。

于 2013-06-16T12:57:46.710 回答