【问题标题】:Display contains for integer array using ternary operator in C#在 C# 中使用三元运算符显示包含整数数组
【发布时间】:2015-11-19 02:19:55
【问题描述】:

我只想检查用户是否在数组中输入了邮政编码,但出现错误;请帮忙。

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace checkzips
{
      class Program
      {  
           public static object f;

           public static void Main(string[] args)
           {       
               // create an integer array for package delivery service
               int[] zipcodes = { 07847, 07848, 07866, 07801, 07808, 07898, 07836,    07854, 07823, 07845 };

               // display original values of array
               Console.WriteLine("All zip codes to which the company delivers packages:");

               foreach (var elements in zipcodes)
                   Console.WriteLine("{0}", elements);

               // prompt a user to enter a zip code
               Console.WriteLine("Enter a zipcode:");
               Console.ReadLine();

               // search the array using foreach loop 
               Console.WriteLine("", f.zipcodes.Contains(Console.ReadLine()) ? string.Empty : "not");
        }
    }
}

我在最后一个 Console.WriteLine 语句中遇到错误:

错误 CS1929 'int[]' 不包含 'Contains' 的定义和 最佳扩展方法重载“Queryable.Contains(IQueryable, string)”需要“IQueryable”checkzips 类型的接收器
H:\checkzips\checkzips\Program.cs 23

【问题讨论】:

  • 当你将几个逻辑操作塞进一行代码中时,很难理解和调试......正如你所发现的那样。
  • 您不想将第一个 Console.ReadLine() 存储到一个变量中并在下一行中使用它吗?还是省略第一个 readline 而只使用第二个?
  • 它就像最后一行中的三元运算符来检查邮政编码是否在该数组中,但我得到错误
  • 我尝试使用变量,但它是同一件事@devlincarnate
  • 邮政编码不应被视为数字,因为邮政编码以 0 开头是完全合法的。这将在数字转换中被删除。

标签: c# linq


【解决方案1】:

您的代码无法编译,因为 f 被声明为 object 并且没有 zipcodes 属性。但是,由于它似乎出于某种原因识别了 f.zipcodesint[],因此您的代码显然与显示的代码不同,这导致了您指出的错误。

问题是Console.ReadLine() 返回一个string,你不能通过传递一个字符串值来对整数集合使用Contains

由于您正在处理邮政编码,因此将它们存储为字符串而不是整数会更合适,因为它们可以以 0 开头并包含非数字字符 (-)。我怀疑你想要:

  string[] zipcodes = { "07847", "07848", "07866", "07801", "07808", "07898", "07836","07854", "07823", "07845" };
  ...
  string zip = Console.ReadLine();
  Console.WriteLine("",f.zipcodes.Contains(zip) ? string.Empty : "not");

请注意,最好将 Console.ReadLine 放在 WriteLine 之外 - 它允许您验证输入、提高调试能力等。

另请注意,您有一个未捕获其输入的流浪 Console.ReadLine()。我怀疑你会在调试过程中发现这一点,但我想我会指出来。

【讨论】:

  • 邮政编码是一个 5 位数字字符串,带有(可能)前导零。您可能希望在回答中考虑到这一点。
  • @spender。好建议。完成。
  • @w.b.它将绑定到在数组上正常工作的 Linq Contains 方法。
猜你喜欢
  • 2019-03-27
  • 2015-12-18
  • 2016-06-12
  • 2015-07-13
  • 2015-07-31
  • 2021-10-31
  • 2020-11-23
  • 1970-01-01
  • 2021-05-12
相关资源
最近更新 更多