Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 00:19

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Generische Klasse und where Problem

Discussion on Generische Klasse und where Problem within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1



 
xShizoidx's Avatar
 
elite*gold: 0
The Black Market: 283/0/0
Join Date: Feb 2011
Posts: 1,351
Received Thanks: 410
Generische Klasse und where Problem

Hallo,

ich habe gerade einen kleinen Test mit Generics gemacht, jedoch bekomme ich nur einen Fehler, wenn ich die Liste übergeben will bzw. genau bei
List<string> myStringList = ToStringListConverter<List<int>>.ToYourList(numbers);

Woran liegt das ? List implementiert ja IEnumerable.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> numbers = new List<int>
            {
                3,
                6,
                8
            };
            List<string> myStringList = ToStringListConverter<List<int>>.ToYourList(numbers);
        }

        static class ToStringListConverter<T> where T : IEnumerable<T>
        {

            public static List<string> ToStringList(T yourList)
            {
                List<string> result = new List<string>();
                foreach (T item in yourList)
                {
                    result.Add(item.ToString());
                }
                return result;
            }
        }
    }
}
xShizoidx is offline  
Old 07/27/2017, 14:43   #2



 
IceTrailer's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 2,070
Received Thanks: 821
Also zunächst würde ich dir empfehlen, um Fehler zu vermeiden var zu verwenden.
heißt konkret statt

Code:
List<string> result = new List<string>();
solltest du

Code:
var result = new List<string>();
verwenden.

Code:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>
            {
                3,
                6,
                8
            };
            var myStringList = ToStringListConverter.ToStringList(numbers);
        }
    }
    // Lösch den Quatsch mit T .. und IEnumerable brauchst du auch nicht
    static class ToStringListConverter
    {
        public static List<string> ToStringList(IList yourlist)
        {
            var result = new List<string>();

            foreach (var item in yourlist)
            {
                result.Add(item.ToString());
            }
            return result;
        }
    }

}
Edit:

Mir ist aufgefallen, dass du IEnumerable ja gar nicht vererben musst
IceTrailer is offline  
Old 07/27/2017, 15:17   #3



 
xShizoidx's Avatar
 
elite*gold: 0
The Black Market: 283/0/0
Join Date: Feb 2011
Posts: 1,351
Received Thanks: 410
Quote:
Originally Posted by IceTrailer View Post
Also zunächst würde ich dir empfehlen, um Fehler zu vermeiden var zu verwenden.
heißt konkret statt

Code:
List<string> result = new List<string>();
solltest du

Code:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>
            {
                3,
                6,
                8
            };
            var myStringList = ToStringListConverter.ToStringList(numbers);
        }
    }
    // Lösch den Quatsch mit T .. und IEnumerable brauchst du auch nicht
    static class ToStringListConverter
    {
        public static List<string> ToStringList(IList yourlist)
        {
            var result = new List<string>();

            foreach (var item in yourlist)
            {
                result.Add(item.ToString());
            }
            return result;
        }
    }

}
Edit:

Mir ist aufgefallen, dass du IEnumerable ja gar nicht vererben musst
Moin,

warum sollte ich var verwenden in diesem Fall ? Wenn ich List<string> direkt ausschreibe, dann sehe ich ja , falls ein Fehler auftritt , weil mir das VS anzeigt. Bei var treten meiner Meinung nach in diesem Fall ja eher Fehler auf, wenn ich mich z.B. auf der rechten Seite, wo List<string> steht, verschreibe.

Ich möchte nicht überprüfen, ob es von einem Interface ableitet, ich möchte es generisch haben, das war nur ein Test von mir und die Funktion wird in der Praxis sowieso nicht verwendet, ich will nur wissen, wo der Fehler lag
xShizoidx is offline  
Old 07/27/2017, 15:34   #4



 
IceTrailer's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 2,070
Received Thanks: 821
Quote:
Originally Posted by xShizoidx View Post
Moin,

warum sollte ich var verwenden in diesem Fall ? Wenn ich List<string> direkt ausschreibe, dann sehe ich ja , falls ein Fehler auftritt , weil mir das VS anzeigt. Bei var treten meiner Meinung nach in diesem Fall ja eher Fehler auf, wenn ich mich z.B. auf der rechten Seite, wo List<string> steht, verschreibe.

Ich möchte nicht überprüfen, ob es von einem Interface ableitet, ich möchte es generisch haben, das war nur ein Test von mir und die Funktion wird in der Praxis sowieso nicht verwendet, ich will nur wissen, wo der Fehler lag
Naja erfahrungsgemäß kann ich sagen, dass ich mehr Fehler mach, wenn ich es ausschreib (mehr zu schreiben, vor allem mit den spitzen "ungewöhnlichen" Klammern, die man ja selten eingibt)

Wenn du es generisch haben willst, würde ich dir empfehlen mal weiter im Internet zu suchen, wie du das mit List<T> machst..
IceTrailer is offline  
Old 07/27/2017, 18:28   #5
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Tag. Hier liegt wahrscheinlich der Fehler:
Code:
static class ToStringListConverter<T> where T : IEnumerable<T>
Einfach zu
Code:
public static class ToStringListConverter<T> where T : IEnumerable<T>
machen.

p.s. wenn ein Fehler vorhanden ist, dann bitte immer die Fehlermeldung mitschicken. Sonst kann man raten was der Fehler sein könnte.
Mikesch01 is offline  
Old 07/27/2017, 20:50   #6



 
xShizoidx's Avatar
 
elite*gold: 0
The Black Market: 283/0/0
Join Date: Feb 2011
Posts: 1,351
Received Thanks: 410
Quote:
Originally Posted by Mikesch01 View Post
Tag. Hier liegt wahrscheinlich der Fehler:
Code:
static class ToStringListConverter<T> where T : IEnumerable<T>
Einfach zu
Code:
public static class ToStringListConverter<T> where T : IEnumerable<T>
machen.

p.s. wenn ein Fehler vorhanden ist, dann bitte immer die Fehlermeldung mitschicken. Sonst kann man raten was der Fehler sein könnte.
Vielen Dank für die schnelle Antwort.
Das ist leider nicht der Fehler :
Code:
Schweregrad	Code	Beschreibung	Projekt	Datei	Zeile	Unterdrückungszustand
Fehler	CS0311	Der Typ "System.Collections.Generic.List<int>" kann nicht als Typparameter "T" im generischen Typ oder in der generischen Methode "Program.ToStringListConverter<T>" verwendet werden. Es ist keine implizite Verweiskonvertierung von "System.Collections.Generic.List<int>" in "System.Collections.Generic.IEnumerable<System.Collections.Generic.List<int>>" vorhanden.	ConsoleApp33	c:\users\torge\documents\visual studio 2017\Projects\ConsoleApp33\ConsoleApp33\Program.cs	19	Aktiv
xShizoidx is offline  
Old 07/27/2017, 21:06   #7
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Das müsste hier dran liegen:
Code:
static class ToStringListConverter<T> where T : IEnumerable<T>
Stell dir vor, wir benutzen für T nun List<int>. Hier ist nun die Ersetzung im Programm wiefolgt:
Code:
static class ToStringListConverter<List<int>> where List<int> : IEnumerable<List<int>>
Das macht natürlich wenig Sinn, wenn IEnumerable nun als Typen die List selbst hat.

Deshalb reicht es vollkommen aus, wenn T nicht von einem generischen IEnumerable ableitet:
Ein gesetztes Beispiel:
Code:
static class ToStringListConverter<List<int>> where List<int> : IEnumerable
Hier ist nun T generisch und kann beliebig angegeben werden. Hauptsache T ist nun abgeleitet von IEnumerable, was ja List ist.

Allgemeiner, richtiger Code:
Code:
static class ToStringListConverter<T> where T : IEnumerable
Mikesch01 is offline  
Old 07/28/2017, 20:08   #8



 
xShizoidx's Avatar
 
elite*gold: 0
The Black Market: 283/0/0
Join Date: Feb 2011
Posts: 1,351
Received Thanks: 410
Quote:
Originally Posted by Mikesch01 View Post
Das müsste hier dran liegen:
Code:
static class ToStringListConverter<T> where T : IEnumerable<T>
Stell dir vor, wir benutzen für T nun List<int>. Hier ist nun die Ersetzung im Programm wiefolgt:
Code:
static class ToStringListConverter<List<int>> where List<int> : IEnumerable<List<int>>
Das macht natürlich wenig Sinn, wenn IEnumerable nun als Typen die List selbst hat.

Deshalb reicht es vollkommen aus, wenn T nicht von einem generischen IEnumerable ableitet:
Ein gesetztes Beispiel:
Code:
static class ToStringListConverter<List<int>> where List<int> : IEnumerable
Hier ist nun T generisch und kann beliebig angegeben werden. Hauptsache T ist nun abgeleitet von IEnumerable, was ja List ist.

Allgemeiner, richtiger Code:
Code:
static class ToStringListConverter<T> where T : IEnumerable
Daran liegt es leider auch nicht
xShizoidx is offline  
Old 08/01/2017, 01:11   #9



 
Shawak's Avatar
 
elite*gold: 0
The Black Market: 259/0/0
Join Date: Apr 2010
Posts: 10,289
Received Thanks: 3,613
so klappts

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        public static void Main(string[] args)
        {
            List<int> numbers = new List<int>
            {
                3,
                6,
                8
            };
            List<string> myStringList = ToStringListConverter<List<int>>.ToStringList(numbers);
            foreach(var item in myStringList)
                Console.WriteLine(item);
        }

        static class ToStringListConverter<T> where T : IEnumerable<int>
        {

            public static List<string> ToStringList(T yourList)
            {
                List<string> result = new List<string>();
                foreach (var item in yourList)
                {
                    result.Add(item.ToString());
                }
                return result;
            }
        }
    }
}
Wobei das halt grundsätzlich Schwachsinn ist und du die Funktionen überladen solltest.
Shawak is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Biete Mathehilfe bis zur 10. Klasse Real/ 9.Klasse Haupt
03/13/2012 - School & Education - 0 Replies
Wenn ihr Probleme mit einer aufgabe habt, schickt mir eine PM. Kostet nur 1eGold. Vielleicht auch nichts :D Kommt ganz auf die aufgaben drauf an.
Volkswechsel alte Klasse(Classic)->neue Klasse(Cata)
01/30/2011 - World of Warcraft - 13 Replies
Hi, Ich würde meinen Untoten Magier gerne zu einem Goblin Magier verändern. Ich weis auch, dass Goblins Magier sein können aber ich finde keine 100% sicheren Infos ob man auch Untoter->Goblin changen kann! Kennt sich da einer aus? Außerdem wird ja der Ruf der alten Heimatstadt auf die neue gewechselt, also sollte in meinem Fall doch nur von Unterstadt->Goblinstadt geändert werden oder? Was ist das langsame Goblinreittier(60%) und was das Schnelle(100%) zu dem meine Skelettpferde...
[C++]Funktion einer Klasse in einer anderen Funktion der Klasse verwenden, aber wie?
07/25/2010 - C/C++ - 3 Replies
Mein Problem ist eigentlich recht simpel und die Lösung wahrscheinlich auch. Da ich bisher fast 0 mit Klassen am Hut hatte, wollte ich mich doch mit dem Thema anfreunden und hatte gleich angefangen: int test::Funktion2() { int temp; cin>>temp; return temp; }
Welche Klasse ist die Beste Klasse
07/06/2010 - Metin2 - 6 Replies
Hallo ich habe heute mal angefangen Metin 2 angefangen und wollte fragen welche klasse ist die beste meine Vorstellung Menge Deff Wird Mich freuen auf Antwort



All times are GMT +1. The time now is 00:21.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.