|
You last visited: Today at 00:19
Advertisement
Generische Klasse und where Problem
Discussion on Generische Klasse und where Problem within the .NET Languages forum part of the Coders Den category.
07/27/2017, 13:43
|
#1
|
elite*gold: 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;
}
}
}
}
|
|
|
07/27/2017, 14:43
|
#2
|
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
|
|
|
07/27/2017, 15:17
|
#3
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,351
Received Thanks: 410
|
Quote:
Originally Posted by IceTrailer
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
|
|
|
07/27/2017, 15:34
|
#4
|
elite*gold: 150
Join Date: Sep 2010
Posts: 2,070
Received Thanks: 821
|
Quote:
Originally Posted by xShizoidx
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..
|
|
|
07/27/2017, 18:28
|
#5
|
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.
|
|
|
07/27/2017, 20:50
|
#6
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,351
Received Thanks: 410
|
Quote:
Originally Posted by Mikesch01
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
|
|
|
07/27/2017, 21:06
|
#7
|
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
|
|
|
07/28/2017, 20:08
|
#8
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,351
Received Thanks: 410
|
Quote:
Originally Posted by Mikesch01
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
|
|
|
08/01/2017, 01:11
|
#9
|
elite*gold: 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.
|
|
|
 |
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.
|
|