Diskuze: Porovnání "nullable bool"

C# .NET .NET (C# a Visual Basic) Porovnání "nullable bool" American English version English version

Avatar
mail
Člen
Avatar
mail:

Ahoj, byl bych moc rád za každou pomoc s následujícím problémem...
Kód:

class Field
   {
       private bool? player;
       private int fieldvalue;
       public Field() : this(null, 0) { }
       public Field(bool? Player, int FieldValue)
       {
           this.Player = Player;
           this.FieldValue = FieldValue;
       }
       public bool? Player
       {
           get { return player; }
           set { this.player = value; }
       }
       public int FieldValue
       {
           get { return fieldvalue; }
           set { this.fieldvalue = value; }
       }
   }
   class GameBoard
   {
       private const int gameboardsize = 10;
       Field[,] SomeField = new Field[gameboardsize, gameboardsize];
       public void FirstLoad()
       {
           if (SomeField[5, 5].FieldValue != null)
               MessageBox.Show("The gameboard is not equals to null");
       }
   }

a vyskočí mi chyba: viz obrázek

Potřeboval bych zkontrolovat, jestli je dané políčko v poli prázdné nebo ne...

Předem děkuji za pomoc...

 
Odpovědět 29.11.2015 19:11
Avatar
Gramli
Redaktor
Avatar
Odpovídá na mail
Gramli:

Fieldvalue nemáš nullable - > int? -> jinak pokud uděláš objekt nullable má pak propertu HasValue. A taky je určité ta třída na indexu [5,5] inicializovana?

Editováno 29.11.2015 19:38
Nahoru Odpovědět 29.11.2015 19:36
Kdo to říká ten to je...
Avatar
Odpovídá na mail
Ondřej Štorc:

A máš vůbec to pole inicializované?

Nahoru Odpovědět 29.11.2015 19:46
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na mail
Petr Čech (czubehead):

U nullovatelných vlastností se neptáš

Property!=null

ale

Property.HasValue

a pokud ano, tak

Property.Value
Nahoru Odpovědět 29.11.2015 20:22
Why so serious? -Joker
Avatar
Posix
Člen
Avatar
Odpovídá na mail
Posix:

Zkus elvisa:

// ...
if (SomeField[5, 5]?.FieldValue != null)
// ...
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 29.11.2015 20:52
Proč to dělat jednoduše, když to jde složitě.
Avatar
Posix
Člen
Avatar
Odpovídá na Petr Čech (czubehead)
Posix:

U nullovatelnych se muzes ptát taky

Property!=null

Stejně tak můžeš použít i jiné operátory, např:

int? karel;
bool ctibor;

karel = 0;
ctibor = karel > 0; // false

karel = null;
ctibor = karel > 0; // false

karel = 42;
ctibor = karel > 0; // true
Nahoru Odpovědět  +1 29.11.2015 20:56
Proč to dělat jednoduše, když to jde složitě.
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:

Operátory jsou jenom zástupné řešení. Řešení tohoto problému bude spíše s otázce :Proč si vybíráš data z pole do kterého sis nic nedal, že?

 
Nahoru Odpovědět 30.11.2015 8:03
Avatar
mail
Člen
Avatar
mail:

Chci v pokračování kódu zjišťovat, jestli dané pole patří 1. hráči, 2. hráči, nebo jestli je prázdné... Napadlo mě, že nejjednodušší bude "nullable bool", který má hodnoty "null!, "true", "false"... Jestli pro to máte nějaký lepší návrh, prosím, budu moc rád, když mi poradíte... Nejsem zkušený programátor... ;-)

 
Nahoru Odpovědět 30.11.2015 9:20
Avatar
Milan Křepelka
Redaktor
Avatar
Odpovídá na mail
Milan Křepelka:

Tak jinak. Komentáře v kódu

public class OneMineField
    {
        public int PositionX { get; private set; }
        public int PositionY { get; private set; }

        public bool HasMine { get; set; }
        public OneMineField(int PositionX, int PositionY)
        {
            this.PositionX = PositionX;
            this.PositionY = PositionY;
        }
    }

    public class Board
    {
        const int sizeX = 5;
        const int sizeY = 5;

        OneMineField[,] fields = new OneMineField[sizeX, sizeY];

        public Board()
        {

            fields = new OneMineField[sizeX, sizeY];
            // tady oneField je null, protože to pole není naplňené
            var oneField = fields[3, 3];

            /*nezapoměl si 'náhodou' na tuto část ?*/
            for (int counterSizeX = 0; counterSizeX < sizeX; counterSizeX++)
                for (int counterSizeY = 0; counterSizeY < sizeY; counterSizeY++)
                {
                    fields[counterSizeX, counterSizeY] = new OneMineField(counterSizeX, counterSizeY);
                }

            //a tady už je všechno v pořádku
            oneField = fields[3, 3];
        }
    }
 
Nahoru Odpovědět 30.11.2015 12:50
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.