mam tej metody:Jak wywołujesz metodę ogólną, jeśli znasz tylko parametr typu w środowisku wykonawczym?
public List<T> SomeMethod<T>(params) where T : new()
więc chcę nazwać SomeMethod
co jest w porządku, jeśli wiem, typ:
SomeMethod<Class1>();
Ale jeśli mam tylko Class1
przy starcie jestem w stanie nazwać?
Jak zatem zadzwonić pod numer SomeMethod
z nieznanym typem T? Dostałem Type za pomocą refleksji.
Posiadam Typ, ale SomeMethod<Type | GetType()>
nie działa.
Aktualizacja 7. maja:
Oto przykładowy kod, co chcę osiągnąć:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication63
{
public class DummyClass
{
}
public class Class1
{
public string Name;
}
class AssemblyTypesReflection
{
static void Main(string[] args)
{
object obj = new Class1() { Name = "John" } ;
Assembly assembly = Assembly.GetExecutingAssembly();
var AsmClass1 = (from i in assembly.GetTypes() where i.Name == "Class1" select i).FirstOrDefault();
var list = SomeMethod<AsmClass1>((AsmClass1)obj); //Here it fails
}
static List<T> SomeMethod<T>(T obj) where T : new()
{
return new List<T> { obj };
}
}
}
To demo wyjęte z większego kontekstu.
SLAKS odpowiedział na twoje pytanie dobrze. Po prostu zwracam uwagę, że niewłaściwie użyłeś tu słowa "anonimowy", co oznacza coś innego. W twoim przypadku T ma charakter ogólny. – SimpleVar
Czy to jest połączenie API lub API innej firmy? Jeśli jest to twoje, rozważ zmianę, ponieważ generics nie rozwiązuje problemu, ale utwórz go w tym przypadku. – empi
możliwy duplikat [Wywołanie metody ogólnej z argumentem typu znanym tylko w czasie wykonywania] (http://stackoverflow.com/questions/325156/calling-generic-method-with-a-type-argument-known-only-at -ekspozycja-czas) – user7116