【问题标题】:Assigning values to objects in a foreach loop [closed]在foreach循环中为对象赋值[关闭]
【发布时间】:2020-01-03 06:44:23
【问题描述】:

如何在foreach 循环中为对象赋值。 代码如下:

using System;

namespace WorkingWithClasses
{
    class Program
    {
        static void Main(string[] args)
        {
        //create 5 player objects
        Player[] players = new Player[5];
        //assigning a value to a player brings null reference exception error:
        foreach(Player player in players)
        {
            player.Skill = 5;
        }


        float skillSum = 0;
        foreach(Player player in players)
        {
            skillSum += player.Skill;
        }

        Console.WriteLine(skillSum);
    }
}
class Player
{
    public float Skill { get; set; }
}
}

【问题讨论】:

  • 欢迎来到 Stack Overflow。不幸的是,您的问题并不清楚 - 它是 just 与标题不同的代码。甚至评论也没有说明您收到的 what 异常。我怀疑这是 NullReferenceException,在这种情况下您应该阅读stackoverflow.com/questions/4660142/…。有关提出一个好的 Stack Overflow 问题的更多指导,请阅读codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question
  • 你得到什么异常错误。尝试像这样分配5.0F
  • @sriharsha:有一个从 intfloat 的隐式转换 - 这不是问题。

标签: c# oop object


【解决方案1】:

玩家数组中的每个“玩家”都没有初始化。尝试使用此 for 循环而不是获取 null 引用的 foreach 循环:

for (var i = 0; i < players.Length; i++)
{
    players[i] = new Player() { Skill = 5 };
}

您也可以使用它,但是它比使用 for 循环遍历数组要慢:

using System.Linq;

players = Enumerable.Repeat(new Player() { Skill = 5 }, 5).ToArray();

【讨论】:

  • 谢谢,您的回答解决了我的问题。是的,这是一个 NullReferenceException。
【解决方案2】:

您需要初始化您的玩家实例对象,因为您正在创建数组持有者。

Player[] players = new Player[5]; 替换为

Player[] players = Enumerable.Repeat(new Player(), 5).ToArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多