Hallo, ich habe ein Problem. Ich möchte über reflection die generischen Parameter und deren Einschränkungen ermitteln, um zu bestimmen, welche Typen als Parameter erlaubt sind.
Aber wie unterscheide ich zwischen, gar keiner Einschränkung und class als Einschränkung?
Ich habe hier mal ein kleines Testprogramm geschrieben, aber zwischen gar keiner Einschränkung und class als Einschränkung, sehe ich überhaupt keinen Unterschied, oder übersehe ich was?
public class Test<T0, T1, T2, T3, T4, T5>
where T1 : class
where T2 : struct
where T3 : ICloneable
where T4 : BinaryReader
where T5 : List<int>
{
}
static void Main(string[] args)
{
Type type = typeof(Test<,,,,,>);
Type[] genericArguments = type.GetGenericArguments();
foreach (Type genericArgument in genericArguments)
{
string name = genericArgument.Name;
Type baseType = genericArgument.BaseType;
Type[] baseInterfaces = genericArgument.GetInterfaces();
bool isClass = genericArgument.IsClass;
bool isAnsiClass = genericArgument.IsAnsiClass;
bool isStruct = genericArgument.IsValueType;
bool isInterface = genericArgument.IsInterface;
Type[] constraints = genericArgument.GetGenericParameterConstraints();
}
}
Ich habe noch eine Frage, ich habe folgendes Gebilde:
public class TestClass1<T>
{
public delegate void TestDelegate();
public class TestClass2<T, T2>
{
public delegate void TestDelegate<T>();
}
}
Type t = typeof(TestClass1<>.TestClass2<,>.TestDelegate<>);
Type[] t2 = t.GetGenericArguments();
Zurück, bekomme ich aber in t2 4 Parameter, kann ich zuordnen welches Parameter zu welchem Typ gehören?
Denn das Property "DeclaringType" verweist bei allen 4 Parametern auf den Typ: TestConsole.TestClass11+TestClass2
2+TestDelegate`1
Hallo lord_fritte,
Visual Studio spuckt folgende zwei Warnungen aus:
Fehlermeldung:
Type parameter 'T' has the same name as the type parameter from outer type 'ConsoleApplication6.TestClass1<T>'
Type parameter 'T' has the same name as the type parameter from outer type 'ConsoleApplication6.TestClass1<T>.TestClass2<T,T2>'
Bringt das ein wenig Licht ins Dunkel? Ich hoffe mal, ich habe dich richtig verstanden.
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.