如何编写列出对象数组值int 1-100的C#代码,并在检测到转换为int的对象可被2整除时输出字符串文本“EVEN”?
class Program
{
static void Main(string[] args)
{
object[] numbers = new object[100];
numbers = Enumerable.Range(1, 100).Cast<object>().ToArray();
foreach (object number in numbers)
{
if(Convert.ToInt32(number) % 2 == 0)
{
number.ToString().Equals("Even");
}
Console.WriteLine(number);
}
Console.Read();
}
}
答案 0 :(得分:3)
你遇到的问题是:
number.ToString().Equals("Even");
这是获取number
的字符串表示形式,然后将其与字符串Even
进行相等性比较,并对结果不做任何操作。如果您退后一步并考虑这一点,那就没有任何意义,因为如果Even
是偶数,您想打印number
。
使用您当前的程序,您可以这样做:
if (Convert.ToInt32(number) % 2 == 0)
{
Console.WriteLine("{0} is even", number);
}
也就是说,你的程序有一些可以改进的东西,因为它看起来好像你已经掌握了C#的类型系统。
首先,您要声明一个包含100个对象的数组:
object[] numbers = new object[100];
您已经知道要使用整数,因此,不应使用object
,而应使用int
:
int[] numbers = new int[100];
接下来,您从1
- 100
生成一系列整数:
numbers = Enumerable.Range(1, 100).Cast<object>().ToArray();
Enumerable.Range()
返回一个整数集合,.ToArray()
将其转换为整数数组。由于我们现在使用的是整数数组,因此无需将它们转换为object
,因此可以简化为:
numbers = Enumerable.Range(1, 100).ToArray();
可以对此进行进一步的简化。 Enumerable.Range()
返回IEnumerable<int>
,表示整数集合。这意味着不是声明一个包含100个整数的数组,生成一个整数集合,将它们转换为数组,并将它们分配给numbers
,我们可以这样做:
IEnumerable<int> numbers = Enumerable.Range(1, 100);
此处可以进行另一项更改,但我会在此答案的最后描述,所以让我们看看循环:
foreach (object number in numbers)
{
if (Convert.ToInt32(number) % 2 == 0)
{
Console.WriteLine(number);
}
}
由于我们已将代码更改为使用IEnumerable<int>
而不是object[]
,因此我们现在可以将循环声明更改为:
foreach (int number in numbers)
这是可能的,因为实现IEnumerable
的类型允许您使用foreach
。另一个例子,如果我们有一群学生:
IEnumerable<Student> students = GetStudents();
我们可以循环这样:
foreach (Student student in students)
回到你的循环,现在number
是int
,我们不必将它从object
转换为int
可以检查它是否均匀。因此循环代码可以简化为:
foreach (int number in numbers)
{
if (number % 2 == 0)
{
Console.WriteLine("{0} is even", number);
}
}
要理解的主要是,当您已经知道要使用的类型时,您应该随时使用它,因为它总是会简化您编写的代码。完整的程序现在看起来像这样:
class Program
{
static void Main(string[] args)
{
IEnumerable<int> numbers = Enumerable.Range(1, 100);
foreach (int number in numbers)
{
if (number % 2 == 0)
{
Console.WriteLine("{0} is even", number);
}
}
Console.Read();
}
}
至于我提到的其他更改,您的整数生成代码可以简化为:
var numbers = Enumerable.Range(1, 100);
var
关键字正在使用implicit type inference来确定numbers
类型。同样,循环也可以更改为:
foreach (var number in numbers)
我暂时不担心隐式类型推断。为了完整起见,我提到了更多,但你应该先学会正确使用类型系统。
答案 1 :(得分:2)
您的代码几乎正确(.Equals("Even")
部分除外)。您在foreach
中的代码可以简化为:
Console.WriteLine(number.ToString() + ((Convert.ToInt32(number) % 2) == 0 ? " is even" : ""));
}
答案 2 :(得分:0)
检查此代码段。
class Program
{
static void Main(string[] args)
{
var stringBuilder = new StringBuilder();
var numbers = new List<object>();
numbers = Enumerable.Range(0, 100).Cast<object> ().ToList();
foreach (var number in numbers)
{
if (Convert.ToInt32(number) % 2 == 0)
stringBuilder.Append("EVEN");
else
stringBuilder.Append(number);
}
Console.WriteLine(stringBuilder.ToString());
}
}
如果此片段可以解决您的问题,请告诉我