C# | for-schleifen Dynamish machen?

Hi ^^

Ich bins mal wieder.. vermutlich wird die Frage einfach genau das gleiche sein wie meine gestrige Frage und ich bin gerade nur zu dumm es zu bemerken...

Jedenfalls.. Ich wollte mal nachfragen ob es möglich ist mehrere verschachtelte for-Schleifen Dynamisch zu machen.

Sprich: Ich habe 6 for-Schleifen und die würde ich gerne weghaben und dafür dann eben eine Dynamische Methode schreiben wollen, jedoch soll die Funktionalität der for-Schleifen beibehalten werden.

Das hier sind meine 6 for-Schleifen:

for (int a = 1; a < 45; a++)
{
for (int b = a + 1; b < 46; b++)
{
for (int c = b + 1; c < 47; c++)
{
for (int d = c + 1; d < 48; d++)
{
for (int e = d + 1; e < 49; e++)
{
for (int f = e + 1; f < 50; f++)
{                                           
zaehler++;
neuer_zaehler = zaehler.ToString("N0");
Console.WriteLine(a + " " + b + " " + c + " " + d + " " + e + " " + f + " | -> " + neuer_zaehler);
if (zaehler == 13983816)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Es wurden {neuer_zaehler} Kombinationen wurden erstellt!");
Console.ReadKey();
}
}
}
}
}
}
}

Wie könnte ich das jetzt Dynamisch umschreiben? Hier habe ich nämlich zudem die Zahlen noch gehardcodet.. Nur würde ich das gerne Dynamisch machen, sodass man egal welche Zahlen man später dem Programm gibt es einen die möglichen Kombinationen ausspucken kann.

Das beispiel im Code ist Lotto 6 aus 49.

Das Programm hat als Output:

1 2 3 4 5 6 | -> 1

....

...

...

44 45 46 47 48 49 | -> 13.983.816

// Ja, ich weiß das ich schon einmal eine Frage hatte mit genau dem selben Code, dass war jedoch eine andere Frage. Die hat sich bereits geklärt.

Computer, programmieren, CSharp, dynamisch, Visual Studio 2015
4 Antworten
PHP AES256 verschlüsseln?

Hallo,

ich benutze eine C# Funktion, die einen String in AES256 ver- und entschlüsselt:

public static string Encrypt(string decryptedtext, string Key32, string IV16)
		{
			byte[] bytes = Encoding.ASCII.GetBytes(decryptedtext);
			AesCryptoServiceProvider aesCryptoServiceProvider = new AesCryptoServiceProvider();
			aesCryptoServiceProvider.BlockSize = 128;
			aesCryptoServiceProvider.KeySize = 256;
			aesCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(Key32);
			aesCryptoServiceProvider.IV = Encoding.ASCII.GetBytes(IV16);
			aesCryptoServiceProvider.Padding = PaddingMode.PKCS7;
			aesCryptoServiceProvider.Mode = CipherMode.CBC;
			ICryptoTransform cryptoTransform = aesCryptoServiceProvider.CreateEncryptor(aesCryptoServiceProvider.Key, aesCryptoServiceProvider.IV);
			byte[] inArray = cryptoTransform.TransformFinalBlock(bytes, 0, bytes.Length);
			cryptoTransform.Dispose();
			return Convert.ToBase64String(inArray);
		}
    public static string Decrypt(string encryptedtext, string Key32, string IV16)
    {
        byte[] array = Convert.FromBase64String(encryptedtext);
        AesCryptoServiceProvider aesCryptoServiceProvider = new AesCryptoServiceProvider();
        aesCryptoServiceProvider.BlockSize = 128;
        aesCryptoServiceProvider.KeySize = 256;
        aesCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(Key32);
        aesCryptoServiceProvider.IV = Encoding.ASCII.GetBytes(IV16);
        aesCryptoServiceProvider.Padding = PaddingMode.PKCS7;
        aesCryptoServiceProvider.Mode = CipherMode.CBC;
        ICryptoTransform cryptoTransform = aesCryptoServiceProvider.CreateDecryptor(aesCryptoServiceProvider.Key, aesCryptoServiceProvider.IV);
        byte[] bytes = cryptoTransform.TransformFinalBlock(array, 0, array.Length);
        cryptoTransform.Dispose();
        return Encoding.ASCII.GetString(bytes);
    }


Die funktion wird ausgeführt:

Encrypt(ambiance_TextBox2.Text, "D6j366yDr30cA4y26a4kkGors3N2bZ06", "peB3b31af5pJ3n1O");

mit einem 32 stelligem key und einem 16 stelligen IV.

was ich will:

in PHP soll ein string mit AES256 verschlüsselt werden und in C# mit dem key wieder entschlüsselt werden.

php:

echo "OK";

soll zu

echo sha256oderso("OK");

werden

und dann mit nem webclient.downloadstring soll das ganze wieder entschlüsselt werden.

ich hab den c# entschlüsselungs teil schon, ich weiß aber nicht, wie man in php einen string mit AES256 mit einem 32 stelligem key und einem 16 stelligem IV verschlüsselt, so dass er in c# als textbox ausgegeben wird.

also:

string result;
string final;
System.Net.WebClient wc = new System.Net.WebClient();
result = wc.DownloadString("https://knif.bplaced.net/action.php");
final = Decrypt(result, "D6j366yDr30cA4y26a4kkGors3N2bZ06", "peB3b31af5pJ3n1O");
MessageBox.Show(final);

und dann soll eine textbox mit "OK" aufpoppen.

programmieren, CSharp, PHP
1 Antwort
könnt ihr mir sagen wo der Fehler ist?csharp events?

teil 1:

namespace App

{
  public partial class FormApo : Form
  {
    Kauf kauf;
    double gesamtpreis = 0;
    public FormApo()
    {
      InitializeComponent();
      kauf = new Kauf();
      List<Medikament> m = kauf.AuswahlDeserialisieren(); 
      comboBoxMedikamente.DataSource = m; //Deserialisierte Liste in combobox einfugen
    }
   private void buttonHinzufuegen_Click(object sender, EventArgs e)
    {
        listBoxWarenkorb.Items.Add(comboBoxMedikamente.SelectedItem);
//combobox auswahl zu listbox hinzufugen
    gesamtpreis = gesamtpreis + Convert.ToDouble(((Medikament)comboBoxMedikamente.SelectedItem).Preis);
 //string preis in double konvertieren u gesamtpreis dazuzählen
      labelGesamtpreis.Text = "" + gesamtpreis; 
    }
    private void comboBoxMedikamente_SelectedIndexChanged(object sender, EventArgs e)
    {
      labelPreis.Text = "" + ((Medikament)comboBoxMedikamente.SelectedItem).Preis; //zahlen als string in label einfügen
    }
    private void listBoxWarenkorb_SelectedIndexChanged(object sender, EventArgs e)
    {
    }
  }
}

Teil 2:

namespace App

{
    public class Kauf
    {
        private List<Medikament> medikamente;
        private List<Medikament> auswahl;

        internal List<Medikament> Medikamente { get => medikamente; set => medikamente = value; }         internal List<Medikament> Auswahl { get => auswahl; set => auswahl = value; }

        public Kauf ()         {             Medikamente = new List<Medikament>();

        }
        public void MedikamentHinzufuegen(Medikament medikament, bool kassenrezept, bool privatrezept)
        {
           
        }
        public List<Medikament> AuswahlDeserialisieren()
        {
            XmlSerializer ser = new XmlSerializer(typeof(List<Medikament>)); 
            StreamReader sr = new StreamReader("Auswahl.xml");
            medikamente = (List<Medikament>)ser.Deserialize(sr); //lesen
            sr.Close();
            return medikamente;
        }
    }

Teil 3:

namespace App

{
  public class Medikament
  {
    private bool rezeptpflichtig;
    private string name;
    private decimal preis;
    private decimal zuzahlung;

    public Medikament()     { }     public Medikament(bool rezeptpflichtig, string name, decimal preis)     {       this.rezeptpflichtig = rezeptpflichtig;       this.name = name;       this.preis = preis;     }

    public decimal ZuzahlungBerechnen(bool kassenrezept)     {       if (!rezeptpflichtig || !kassenrezept)       {         zuzahlung = 0;       }       else       {         zuzahlung = this.preis * 10 / 100;

        if(zuzahlung < 5)         {           zuzahlung = 5;         }         else if (zuzahlung >10)         {           zuzahlung = 10;         }       }               return Zuzahlung;     }     override public String ToString()     {       return this.name;     }   }

programmieren, CSharp
3 Antworten
C#: Meine Tests in Visual Studio lassen sich nicht mehr ausführen?

Die ganze Zeit lief in meiner Projektmappe von .NET Framework-Bibliotheken alles problemlos, ich konnte meine Testmethoden problemlos schreiben und ausführen (ist meine erste Erfahrung mit MSTest). Dann habe ich in einer meiner Bibliotheken einen AssertHelper geschrieben, indem ich Assert.IsInstanceOf aufrufe. Weil diese Bibliothek Assert nicht kannte, habe ich der Empfehlung Visual Studios naiv folgend MSTest.TestFramework von NuGet installiert.

Jetzt ließen sich die Tests für dieses Projekt allerdings nicht mehr ausführen, ich bekam recht dubiose Fehler ("[MSTest][Discovery] Fehler beim Ermitteln von Tests aus der Assembly. Ursache:Die Datei oder Assembly "System.Runtime" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden."). In einem GitHub-Issue habe ich herausgefunden, dass ich die Packages deinstallieren und auf eine lokale DLL verweisen solle, was ich dann auch gemacht habe.

Problem nun: Beim Kompilieren meines Testprojektes findet VS nun keine Definition mehr für Assert.ThrowsException - alle anderen Tests mit den normalen Methoden AreEqual, IsInstanceOfType etc. kennt er aber! Dieses Bild bestätigt sich auch, wenn ich mit F12 die Metadaten für die Assert-Klasse anzeigen lasse. Auf MS Docs steht für all diese Methoden aber die gleiche benötigte MSTest-Version, weswegen ich mir dieses Phänomen nicht erklären kann. In besagter Metadatenansicht zeigt VS nur an, Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll läge in der Version 10.0.0.0 vor.

Ich weiß nicht weiter - wie kann ich einfach nur meine Tests wieder ausführen, wie ich es vorher getan habe? Davon, die Projektmappe aus allen einzelnen Sourcefiles manuell erneut zusammenzustellen, würde ich gerne absehen, weil sie immerhin schon aus sechs einzelnen Projekten besteht (die teils auch in anderen Projektmappen Anwendung finden).

Über eure Hilfe wäre ich dementsprechend hocherfreut!

Computer, Test, Microsoft, Technik, IT, programmieren, IDE, Programmierung, C Sharp, CSharp, Informatik, Technologie, Visual Studio, vs, .net-Framework, NET, Spiele und Gaming
1 Antwort
C#: Sollte ich für Rückgabetypen eine Klasse oder eine Struktur einführen?

Da mein Programm ohnehin schon in größerem Ausmaß rekursiv arbeitet, will ich die Performance an dieser Stelle nicht völlig vernachlässigen.

Vor dem Refactoring hatte ich eine "Monstersignatur" der folgenden Art:

internal abstract IEnumerable<(Processor.MainThing copy, SecondaryThing attachment)> GenerateDescendents(Processor.DescendentProvider descendentProvider, Processor.GeneratorContext generatorContext);

Jetzt wollte ich die zumindest etwas übersichtlicher machen, indem ich eine Hilfsklasse eingeführt habe:

internal class Processor.DescendentProvider.DescendentProduct {
    public MainThing Copy { get; }
    public SecondaryThing Attachment { get; }
}

Allerdings bin ich mir nicht sicher, ob für diesen Zweck eine Struktur (struct) vielleicht eher angemessen wäre als eine Klasse. Da nur zwei Referenzen gehalten werden, liegt die Größe wohl bei unter 16 Bytes?

Ich besitze leider keine Vorstellung davon, ob jetzt ein größerer Overload dadurch entsteht, diese Klasse zu alloziieren, referenzieren und dealloziieren oder eher dadurch, eine Struktur auf dem Callstack hin- und herzukopieren.

Über euren Rat würde ich mich daher freuen!

(Anmerkung: Die Namen der Typen und Variablen habe ich unter Berücksichtigung des Invidivual Property bewusst abstrakt gehalten. Mir ist natürlich klar, dass Bezeichner in der Praxis konkretere Namen erhalten sollten.)

programmieren, Programmierung, CSharp, Informatik, Klasse, OP, Struktur, stack, Objektorientiert, Objektorientierung, NET
3 Antworten
Programm zur Erzeugung von Zufallszahlen?

 int[] zahlen;
        int x;
        int startwert;
        int endwert;
        Random zufall;
        double anzahl,i,zahl;
        public Form1()
        {
            InitializeComponent();

            zahlen = new int[100];
            zufall = new Random();
            x = zufall.Next(startwert, endwert);
        }
        private bool gefunden(int x)
        {
            for (int i = 0; i < zahlen.Length; i++)
            {
                if (zahlen[i] == x)
                {
                    return true;
                }
            }
            return false;
        }
   

gf

        private void button2_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == string.Empty)
            {
                MessageBox.Show("TextBox1 ist leer", "Fehler");

            }
            if (textBox2.Text == string.Empty)
            {
                MessageBox.Show("TextBox2 ist leer", "Fehler");
            }
            if (textBox3.Text == string.Empty)

            {
                MessageBox.Show("TextBox3 ist leer", "Fehler");
            }
           
            startwert = Convert.ToInt32(textBox1.Text);
            endwert = Convert.ToInt32(textBox2.Text);
       
            for (int i = 0; i < zahlen.Length; i++)
            {
                do
                {
                    while (gefunden(x))
                    {
                        x = zufall.Next(startwert, endwert);
                    }
                } while (i<anzahl);


                zahlen[i] = x;
            }
            listBox1.Items.Add(x);
        }
        private void button4_Click(object sender, EventArgs e)
        {
            Close();
        }
    }

Hallo kann jemand helfen ich komme nicht weiter ich muss ein Programm zur Erzeugung von Zufakkszahlen es sokken maximale 100 Zufallszahlen wahlweise mit oder ohne Duplikate erzeugt und in einer Listbox ausgegben werden

Computer, Schule, programmieren, CSharp
2 Antworten
NullReferenceException?

Hallo,

ich bin dabei, ein Programm zu schreiben (in C#), welches mit Hilfe von WMI auf die Registry zugreift, um dort Informationen zu einem angegebenen Rechner zu holen. Dabei bin ich auf ein Problem gestoßen:

Dann habe ich natürlich den Rat befolgt und habe bei den Rechnern den vorgeschlagenen Code durchgeführt. Nun aber kommt ein neuer Fehler, mit dem ich nicht so recht weiß, etwas anzufangen.

Dieser hier:

Hat da jemand eine Ahnung?

Hier der Code:

  static void Main(string[] args)
  {
    string computer = hostName;
    string domain = "edis";
    string username = "sysadmin";
    string plaintextpassword;
    SecureString securepassword = new SecureString();
  
    foreach (char c in plaintextpassword)
    {
      securepassword.AppendChar(c);
    }
  
    CimCredential Credentials = new CimCredential(PasswordAuthenticationMechanism.Default, domain, username, securepassword);
    WSManSessionOptions SessionOptions = new WSManSessionOptions();
    SessionOptions.AddDestinationCredentials(Credentials);
    CimSession Session = CimSession.Create(computer, SessionOptions);
  
    var allProc = Session.QueryInstances(@"root\cimv2", "WQL", "SELECT * from Win32_Processor");
    var allOP = Session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_OperatingSystem");
    var allCS = Session.QueryInstances(@"root\cimv2", "WQL", "SELECT* FROM Win32_ComputerSystem");
    Console.WriteLine(allProc);
  
    foreach (CimInstance oneP in allProc)
    {
      if (oneP.CimInstanceProperties["DriveLetter"].ToString()[0] > ' ')
      {
        Console.WriteLine("Volume ‘{0}’ has {1} bytes total, {2} bytes available", oneP.CimInstanceProperties["Name"], oneP.CimInstanceProperties["Size"], oneP.CimInstanceProperties["SizeRemaining"]);
      }
    }
  
    foreach (CimInstance oneOP in allOP)
    {
      if (oneOP.CimInstanceProperties["DriveLetter"].ToString()[0] > ' ')
      {
        Console.WriteLine("Volume ‘{0}’ has {1} bytes total, {2} bytes available", oneOP.CimInstanceProperties["csname"], oneOP.CimInstanceProperties["Caption"], oneOP.CimInstanceProperties["Version"]);
    }
  }

    // Loop through all volumes
    foreach (CimInstance oneCP in allOP)
    {
      // Show volume information
      if (oneCP.CimInstanceProperties["DriveLetter"].ToString()[0] > ' ')
      {
        Console.WriteLine("Volume ‘{0}’ has {1} bytes total, {2} bytes available", oneCP.CimInstanceProperties["TotalPhysicalMemory"], oneCP.CimInstanceProperties["Model"]);
      }
    }
  }
}

Hier nochmal mit Foto:

Bitte helft mir.

Gruß

MugiwaraSenpai

Computer, programmieren, Connection, CSharp, registry
1 Antwort
Unity3D / C#: "GetComponent" von Liste?

Hallo liebe Unity3D- und C#-Freunde da draußen!

Ich arbeite gerade an einem Ich-bin-ein-Ball-und-sammle-kleine-Würfel-ein-Spiel, bin aber leider ein totaler Anfänger, wenn es um das Skripten geht und jetzt auf ein Problem gestoßen.

Und zwar habe ich, wie in meiner letzten Frage schon erwähnt, mein Spiel mithilfe des PostProcessingStack-Pakets, etwas "aufgehübscht". Jetzt dachte ich mir, es wäre es ein tolles Feature, wenn ich bei Berührung einiger Objekte ein anderes PostProcessingStack-Profil aufrufen könnte. Zum Beispiel beim Durchfahren meiner giftigen Wolken hätte ich gerne ein leichtes Rauschen usw..

Also habe ich ein zweites PPS-Profil erstellt und mit folgendem Skript die Berührung "beobachtet" und das neue PPS-Profil verwendet (dieses Skript hat die Kamera!).

GameObject Player;
GameObject Gas;
Collider PlayerCollider;
Collider GasCollider;

void Start()
{
  Player = GameObject.FindGameObjectWithTag("Player");
  GameObject Gas = GameObject.FindGameObjectWithTag("Gas");
  PlayerCollider = Player.GetComponent<Collider>();
  GasCollider = Gas.GetComponent<Collider>();
}

void LateUpdate()
{
  if (PlayerCollider.bounds.Intersects(GasCollider.bounds))
  {
    GetComponent<PostProcessingBehaviour>().profile = GasProfile;
  }
  else if (!PlayerCollider.bounds.Intersects(GasCollider.bounds))
  {
    GetComponent<PostProcessingBehaviour>().profile = CCProfile;
  }
}

So, das funktioniert auch wunderbar. Aber leider immer nur bei einer Wolke.

Ich würde jetzt gerne die Wolken (im Skript "Gas" genannt) in eine Liste umwandeln. Ich habe da ein bisschen mit den eckigen Klammern herumgespielt, jedoch mehr Fehler als Erfolge erzielt. Ich hoffe, mir kann jemand da draußen helfen.

Vielen Dank schon mal im Voraus!

Beste Grüße KomischerLappen. 😊

Computer, programmieren, Programmierung, CSharp, Liste, Unity, unity3d
2 Antworten
C# SQL Abfrage; Loginformular?

Ich habe eine ähnliche Frage heute schon einmal gestellt, allerdings hat die Person, die mir schon weit dabei geholfen hat, nicht mehr geantwortet. Deshalb die Frage neu:

Was ist hier falsch?

SQLiteConnection dbConnection = new SQLiteConnection(@"Data Source = C:/Temp/XXXX.db; Version = 3;");
                dbConnection.Open();
                string select = "SELECT COUNT() FROM registered_users WHERE user_mail='" + Email.Text + "' AND user_password='" + PW.Text + "';";                 using (SQLiteCommand cmd = new SQLiteCommand(select, dbConnection))                 {                     object o = cmd.ExecuteScalar();                     int numberOfUsers = (int)o;                     if (numberOfUsers == 0)                     {                         MessageBox.Show("Eingeloggt");                         Application.Restart();                     }                     else                     {                         MessageBox.Show("Anscheinend sind die Anmeldedaten nicht korrekt. Versuche es erneut.", "Login fehlgeschlagen", MessageBoxButtons.OK, MessageBoxIcon.Warning);                     }                 } 

Wenn ich mich versuche einzuloggen, kommt

System.InvalidCastException: "Die angegebene Umwandlung ist ungültig."

bei

int numberOfUsers = (int)o;

Ich habe einen Haltepunkt eingefügt und folgendes Ergebnis:

Korrekte Eingaben:

https://prnt.sc/ll6lsm

Inkorrekte Eingaben:

https://prnt.sc/ll6m00

Vielleicht kennt sich da jemand besser aus als ich.

MfG

Computer, sql, programmieren, CSharp, sqlite
1 Antwort

Meistgelesene Fragen zum Thema CSharp

C# gerade und ungerade Zahlen ausgeben?

3 Antworten

Wie kann ich unter Visual Studio 2017 RC ein Klassendiagramm erzeugen?

4 Antworten

Whatsapp Web aktivieren ohne Kamera?

2 Antworten

Was ist der unterschied zw. string, double und int.?

2 Antworten

Ist java oder c# die sprache der Zukunft?

5 Antworten

C# while (bedingung 1 ll bedingung 2 ll bedingung 3 usw) möglich?

6 Antworten

Was ist der unterschied zwichen ArrayList und List?

2 Antworten

Wie ermittle ich in C# den größten Double Wert?

3 Antworten

Visual Studio 2017 RC Community ist abgelaufen: Hilfe, wie setze ich mein wichtiges Projekt jetzt fort?

4 Antworten

CSharp - Neue und gute Antworten