空字符串比较失败

时间:2018-02-08 17:22:22

标签: c# string

目前正在写一个简单的预订。现在我有一个多维字符串数组,用于保存乘客姓名,我正在尝试遍历该数组并查看是否有任何未打开的座位,以便我知道是否将它们添加到等候名单中。

        // Check how many seats are taken
        for (int i = 0; i <= nameArray.GetUpperBound(0); i++)
        {
            for (int j = 0; j <= nameArray.GetUpperBound(1); j++)
            {
                if (nameArray[i, j] == "")
                {
                    seatsFilled--;
                }
                else
                {
                    seatsFilled++;
                }
            }
        }

由于某些原因,当我调试时,我注意到这一行

if (nameArray[i, j] == "")

尽管数组中没有名称,但根本没有做任何事情并被跳过。我不能为我的生活找出原因。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我可以看到的原因之一是比较可能有空格。试试这个

        if(string.IsNullOrWhiteSpace(nameArray[i, j]))

答案 1 :(得分:1)

我会做这样的事情:

首先,我将创建一些定义座位结构的接口和模型。确保考虑到座位限制。

    public interface ISeat
    {
        int RowNumber { get; }
        string SeatLetter { get; }
        PassangerModel Passenger { get; }
    }

我们希望根据乘客的年龄和身高限制部分座位。进入每个座位的硬编码是令人讨厌的,所以我创建了一个SeatRestriction类,其中包含谓词。该谓词将采用乘客模型并返回结果。因此,例如,您可以创建一个SeatRestriction,检查乘客的身高或年龄,以确保他们可以打开紧急门。

    public class SeatRestriction
    {
        public Predicate<PassangerModel> Restriction { get; private set; }

        public SeatRestriction(Predicate<PassangerModel> restriction)
        {
            Restriction = restriction;
        }
    }

乘客模型实际上可能比这更冗长。我假设这里没有饮食需求。也许这是Spirit Airlines的预订系统。

    public class PassangerModel
    {
        public string Title { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
        public string Gender { get; set; }

        public string StreetAddress { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string ZipCode { get; set; }

        public string CreditCardName { get; set; }
        public string CreditCardNumber { get; set; }
        public string CreditCardExpiration { get; set; }
        public string CreditCardSecurityPin { get; set; }
    }

接下来我们来到座位班。该课程允许我们查看乘客是否被分配到座位。请注意,如果乘客符合限制条件(如果有的话),它还会在将乘客添加到座位之前声明。

    public interface IRestrictedSeat
    {
        List<SeatRestriction> Restrictions { get; }

        bool AssertQualifiedPassenger(PassangerModel passenger);
    }

    public class Seat : ISeat, IRestrictedSeat
    {
        public bool IsSeatReserved { get { return Passenger != null; } }

        public int RowNumber { get; private set; }

        public string SeatLetter { get; private set; }

        public PassangerModel Passenger { get; private set; }

        public List<SeatRestriction> Restrictions { get; private set; }

        public Seat(int rowNumber, string seatLetter)
        {
            Restrictions = new List<SeatRestriction>();
            RowNumber = rowNumber;
            SeatLetter = seatLetter;
        }

        public bool TryAddPassenger(PassangerModel passanger)
        {
            if (AssertQualifiedPassenger(passanger))
            {
                Passenger = passenger;
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool AssertQualifiedPassenger(PassangerModel passenger)
        {
            foreach(SeatRestriction restriction in Restrictions)
            {
                if (!restriction.Restriction(passenger))
                {
                    return false;
                }
            }
            return true;
        }

    }

最后我们到了这一行。我们的行知道它的座位是什么以及它的数量是多少。您应该可以为其添加座位,然后拨打GetAvailableSeats以获取此行中剩余的座位。

    public class SeatRow
    {
        public int TotalSeats { get; private set; }
        public int RowNumber { get; private set; }

        public List<Seat> Seats { get; private set; }

        public SeatRow(int seatsInRow, int rowNumber)
        {
            TotalSeats = seatsInRow;
            RowNumber = rowNumber;
        }

        public bool TryAddSeatToRow(Seat seat)
        {
            if(Seats.Count <= TotalSeats && seat.RowNumber == RowNumber)
            {
                Seats.Add(seat);
                return true;
            }
            else
            {
                return false;
            }
        }

        public IEnumerable<Seat> GetAvailableSeats()
        {
            return Seats.Where(seat => seat.IsSeatReserved == false);
        }

    }

这个答案的长期和短期是有一百万种方法可以解决CIS问题,并且在你上学/学习时不依赖于堆栈溢出。祝你好运,欢迎来到俱乐部:-)

答案 2 :(得分:0)

if (nameArray[i, j] == "")

  

根本没有做任何事情,并且尽管数组中没有没有名字,但仍会被跳过。

该行位于循环中,循环遍历数组中的项目。如果数组为空,则永远不会执行。