Avatar billede Skynet Mester
12. juni 2010 - 23:25 Der er 21 kommentarer og
1 løsning

if sætning, med ALLE i liste som betingelse

Hej jeg har en liste, med klassen barn. Der er en værdi som er bool. Når alle "børn" er blvet til true. Skal nedestående vindue først åbne. Men hvordan laver man if sætningen så det ikke kun er ved et barn, men ved ALLE at den åbner? tak.


foreach (barn et_barn1 in Kids)
            {

           

                if (!(et_barn1.Propertyinfo == false))
                {

                    _1_child_resultat f1 = new _1_child_resultat(amount, antal_kids, Kids);

                    f1.Show();

                    this.Close();

                }



            }
Avatar billede Syska Mester
12. juni 2010 - 23:42 #1
bool open = !Kids.Exists(a => a.Propertyinfo == false);
if(open)
{
// open window
}
Avatar billede pej-delphi Nybegynder
12. juni 2010 - 23:59 #2
Du laver et flag, som du sætter lig med sand.
Du laver en løkke, som tildeler værdien for barnet til din flagvariabel. Hvis værdien er falsk skal løkken stoppes.
Efter løkken spørger du med en if om din flag-variabel er sand, så er alle børn sande. Er din flag-variabel falsk har mindst et barn den falske værdi.

var flag=true;
for (var i=0; i<kids.length; i++)
{
  flag=kids[i].result;
  if (!flag)
  {
      i=kids.length;
  }
}
if (flag)
  f1.Show();
Avatar billede Syska Mester
13. juni 2010 - 00:20 #3
Jeg gør brug af LINQ og lidt forklaring

// Hvis der findes et barn med Propertyinfo == false, return den værdi, inden den bliver sat til "open" variablen bliver den inverteret, så open bliver true hvis den ingen fandt.
bool open = !Kids.Exists(a => a.Propertyinfo == false);

if(open) // ja, er den sandt, så lav nogle magiske ting
{
// open window
}
Avatar billede bvli Praktikant
13. juni 2010 - 10:06 #4
Men er det ikke lige præcis det TrueForAll<T> er til for?

if (list.TrueForAll(x => x.PropertyInfo)) {
  //Open window..
}
Avatar billede montago Praktikant
13. juni 2010 - 12:29 #5
bvli:

eller .ALL:

if(list.All(a=>a.PropertyInfo))
{
  open.Window();
}
Avatar billede Syska Mester
13. juni 2010 - 12:30 #6
haha, bvil, tænkte også noget i den retning men kunne ikke lige kommet på et navn den burde have ... :-)

Så derfor min Exists ... men mon ikke de bruger næsten samme logik.

og performance på dem ... ja, det må vel være det samme. Begge returnere vel når de finder første false.

Så udover jeg nok også ville bruge din ... da navnet er bedre og knap så kryptisk logik ... så er det vel 100% det samme.

mvh
Avatar billede Skynet Mester
14. juni 2010 - 09:41 #7
tak, men man kan vel ikke bruge => når x.PropertyInfo er en boolsk værdi?
Avatar billede Skynet Mester
14. juni 2010 - 09:58 #8
til pej-delphi

Visual studio klager over "Kids.length" - når jeg klikker Kids. kan jeg ikke finde length som en valgmulighed?

Skal man ikke også med din metode definere at det er Propertyinfo man søger efter om er true?
Avatar billede Skynet Mester
14. juni 2010 - 10:06 #9
Til Buzzz

Tak, jeg kan bruge din metode, så hvis alle er true så åbner den en messagebox, men den vil ikke åbne et vindue?

Her er eksempelt, hvis ikke alle true, åbner den f1, og hvis de er true åbner den f2. Men af en eller anden grund får jeg "Error    1    Only assignment, call, increment, decrement, and new object expressions can be used as a statement"


foreach (barn et_barn1 in Kids)
            {

             
               
                bool open = !Kids.Exists(a => a.Propertyinfo == false);
            {
                if (open)
                {
                    _1_child_resultat f2 = new _1_child_resultat(amount, antal_kids, Kids);
                    f2.Show;
                    this.Close();
                }


                    forskud f1 = new forskud(amount, antal_kids, Kids);
                    f1.Show();
                    this.Close();
           
           
            }
Avatar billede montago Praktikant
14. juni 2010 - 10:12 #10
for helved...


foreach (barn et_barn1 in Kids)
{
    if (Kids.All(a => a.Propertyinfo))
    {
        _1_child_resultat f2 = new _1_child_resultat(amount, antal_kids, Kids);
        f2.Show;
        this.Close();
    }
    else
    {
        forskud f1 = new forskud(amount, antal_kids, Kids);
        f1.Show();
        this.Close();
    }
}
Avatar billede montago Praktikant
14. juni 2010 - 10:13 #11
.All
.Exists
.Any

er LINQ Extension metoder

(a => a.propertyinfo) er LAMBDA


velkommen til .NET 3.x
Avatar billede Skynet Mester
14. juni 2010 - 10:14 #12
Til bvli

med din metode, siger den true for all, selv om der er en false og en true?

  if (Kids.TrueForAll(x => et_barn1.Propertyinfo))
                {
                    {
                        MessageBox.Show("true for all");
                    }

                    forskud f1 = new forskud(amount, antal_kids, Kids);
                    f1.Show();
                    this.Close();
                }
Avatar billede Skynet Mester
14. juni 2010 - 10:21 #13
til montage

ok :) - men skal jeg så ikke havde dette i toppen

using System.LAMBDA;

har kun p.t.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
Avatar billede montago Praktikant
14. juni 2010 - 10:21 #14
med din metode, siger den true for all, selv om der er en false og en true?

  if (Kids.TrueForAll(x => et_barn1.Propertyinfo))
-------------

den kode er også helt hen i hampen..

i din lambda skal der stå : (x => x.Propertyinfo)
Avatar billede montago Praktikant
14. juni 2010 - 10:22 #15
til montago

ok :) - men skal jeg så ikke havde dette i toppen

using System.LAMBDA;

har kun p.t.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

----------------

Nej...

System.Linq namespacet indeholder det hele
Avatar billede Skynet Mester
14. juni 2010 - 10:32 #16
Til Buzzz

mangelde () :o)


dette virker

bool open = !Kids.Exists(a => a.Propertyinfo == false);
            {
                if (open)
                {
                    _1_child_resultat f2 = new _1_child_resultat(amount, antal_kids, Kids);
                    f2.Show();
                    this.Close();
                }

                else

                {
                    forskud f1 = new forskud(amount, antal_kids, Kids);
                    f1.Show();
                    this.Close();
                }


            }
Avatar billede Syska Mester
14. juni 2010 - 10:49 #17
svar
Avatar billede Skynet Mester
14. juni 2010 - 11:02 #18
virker også

  if (Kids.TrueForAll(x => x.Propertyinfo))
            {

               
                    _1_child_resultat f2 = new _1_child_resultat(amount, antal_kids, Kids);
                    f2.Show();
                    this.Close();
               
            }

            if (!(Kids.TrueForAll(x => x.Propertyinfo)))
            {
                forskud f1 = new forskud(amount, antal_kids, Kids);
                f1.Show();
                this.Close();

            }




Så giver alle points, tak for hjælpen..

Til pej-delphi, vil gerne lære mere om din metode, og hvorfor kids.length ikke virker hos mig..
Avatar billede Syska Mester
14. juni 2010 - 22:12 #19
Kids er en liste ... så det er "Count" du skal bruge istedet for.

Så virker pej-delphi's version også.

mvh
Avatar billede Skynet Mester
14. juni 2010 - 23:02 #20
cool :)
Avatar billede Skynet Mester
05. august 2010 - 14:33 #21
hej igen, nogle som ved hvor den ikke tjekker begge lister?

    if ((Kids.TrueForAll(x => x.PropertyTestamente_behandling)) & ( _liste_testamentepersoner.TrueForAll(y => y.PropertyTestamente_behandling)

{
;
}

Når jeg kører programmet går den KUN hen til Kids.TrueForAll(x => x.PropertyTestamente_behandling) og springer ( _liste_testamentepersoner.TrueForAll(y => y.PropertyTestamente_behandling) over, selv om jeg har lavet &


Synes det virker meget ulogisk.. nogle som har et bud på hvorfor? når jeg kører testen er alle i Kids true, men ikke i min liste med _liste_testamentepersoner.. og når jeg kører programmet, tjekker den slet ikke betingelsen i _liste_testamentepersoner
Avatar billede Syska Mester
05. august 2010 - 14:50 #22
Opret et nyt spm ... dette er gammelt.

men & er en binær operator

Du skal bruge &&

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester