Laden...

Wie kann ich ein Typargument expliziert angeben?

Erstellt von XBORIAL vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.031 Views
X
XBORIAL Themenstarter:in
2 Beiträge seit 2019
vor 5 Jahren
Wie kann ich ein Typargument expliziert angeben?

Hallo,

ich habe ein Anfängerproblem zum unten aufgeführten Code. Ich soll ein Typargument expliziert angeben. Weiss einer Rat, wie ich das Problem lösen könnte? Besten Dank im Voraus!

using System;

class Permutations
{
    static void Main(string[] args)
    {
        int[] values = { 1, 2, 3, 4 };
        Generate(values.Length, values); // Hier wird Generate rot unterstrichen
        string[] words = { "The", "quick", "brown", "fox" };
        Generate(words.Length, words); // Hier wird Generate rot unterstrichen

        Console.ReadKey();
    }

    static void Generate<T>(T[] A, int n)
    {
        if (n >= 1)

           Console.WriteLine("" + string.Join("", A));
           else
         {
               Generate(A, n + 1);

               for (int i = n + 1; i < n; i++)
              {
                    Swap(ref A[n], ref A[i]);
                    Generate(A, n + 1);
                    Swap(ref A[n], ref A[i]);
              }
         }
    }

    // Swap Funktion
    static void Swap<T>(ref T swap1, ref T swap2)
    {
        T temp = swap1;
        swap1 = swap2;
        swap2 = temp;
    }
}

T
156 Beiträge seit 2010
vor 5 Jahren

Hi,

wo kommt denn die Methode

Generate(..., ...)

her?

Da fehlt doch sicher ein Namespace - Import?

Gruß, Marko

T
2.219 Beiträge seit 2008
vor 5 Jahren

Du übergibst beim ersten Generate auch den falschen Parameter.
Dort musst du values und dann erst values.Length übergeben.

Es würde reichen, wenn du den int Parameter entfernst und nur das Array mitgibst.
Den zweiten Parameter bekommst du so oder so aus der Array.Length Eigenschaft.

Ebenfalls solltest du den Helfern etwas unter die Arme greifen und deinen Code zum guten lesen Einrücken + die Code Tags nutzen.


using System;

class Permutations
{
	public static void Main(string[] args)
	{
		int[] values = { 1, 2, 3, 4 };
		string[] words = { "The", "quick", "brown", "fox" };
		
		Generate(values, values.Length);
		Generate(words, words.Length);

		Console.ReadKey();
	}
	
	private static void Generate<T>(T[] array, int length)
	{	
		if (length >= 1)
		{		
			Console.WriteLine("" + string.Join("", array));
		}
		else
		{
			Generate(array, length + 1);
			
			for (int i = length + 1; i < length; i++)
			{
				Swap(ref array[length], ref array[i]);
				Generate(array, length + 1);
				Swap(ref array[length], ref array[i]);
			}
		}
	}
	
	// Swap Funktion
	private static void Swap<T>(ref T current, ref T next)
	{
		T temp = current;
		current = next;
		next = temp;
	}
}

Nachtrag:
@trashkid2000
Die Methode steht dort, ist nur wegen den fehlenden Code Tags und der fehlenden Einrückung etwas leicht zu überlesen!

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

X
XBORIAL Themenstarter:in
2 Beiträge seit 2019
vor 5 Jahren

Super, Vielen Dank, T-Virus

Ja, leider hat die Einrückung beim Erstellen des Themas nicht funktioniert. Sorry hierfür!
Bin hier neu und muss noch lernen mit dem Forum umzugehen.

Besten Dank nochmal,. Das hat mir sehr geholfen.

4.931 Beiträge seit 2008
vor 5 Jahren

Editiere deinen Eingangsbeitrag und füge die C#-Tags hinzu (so lernst du es 😉.
Und über die Vorschau kannst du es dann überprüfen, bevor du es absendest.