Wie CodeFunction2 mit IEnumerable <> Typ zu schaffen?
-
20-09-2019 - |
Frage
ich wirklich so etwas wie die folgenden erstellen müssen, ich bin Gebäude 2 Klassen, wobei die ersten eine Klasse mit dem Namen tableNameAsSingular (dh AddressEntity) ist, in meiner zweiten Arbeiter Klasse muß ich etwas wie die folgenden
public IEnumerable<AddressEntity> GetAddressEntity()
{
// the good stuff...
}
Wenn die Funktion zu schaffen Ich habe folgende ..
Type t = Type.GetType("IEnumerable<" + tableNameAsSingular + ">");
CodeFunction2 finderFunction = (CodeFunction2)entityServiceClass.AddFunction("Get" + table.Name, vsCMFunction.vsCMFunctionFunction, t, -1, vsCMAccess.vsCMAccessPublic, null);
aber t ist immer null
Wenn ich Type.GetType(tableNameAsSingular)
tun gibt es null zu
Jede Hilfe oder Zeiger würde greatfully empfangen werden. Auch wenn jemand weiß, wo eine Vielzahl von EnvDTE Codegenerierung Wissen lebt Ich wäre sooo dankbar!
Update
Ich habe es jetzt nur als Zeichenfolge mit folgenden versucht:
public void AddFinderMethod()
{
string t = "IEnumerable<" + tableNameAsSingular + ">";
CodeFunction2 finderFunction = (CodeFunction2)entityServiceClass.AddFunction("Get" + table.Name, vsCMFunction.vsCMFunctionFunction, t, -1, vsCMAccess.vsCMAccessPublic, null);
// Code here remove as it does not get this far yet.
}
, aber ich erhalte "IEnumerable<ProductEntity> is not a valid identifier
" Fehlermeldung in der AddFunction Methode
Lösung 2
haben es geschafft, um es mit den folgenden Arbeiten:
string returnType = "System.Collections.Generic.IEnumerable<" + tableNameAsSingular + ">";
CodeFunction2 finderFunction = (CodeFunction2)entityServiceClass.AddFunction("Get" + table.Name, vsCMFunction.vsCMFunctionFunction, returnType, -1, vsCMAccess.vsCMAccessPublic, null);
Andere Tipps
Die Syntax ist IEnumerable<T>
C # Syntax, nicht .NET-Syntax (die Back-Zecken verwendet, Zähler, usw.). Was Sie meinen, ist:
Type tableType = Type.GetType(assemblyQualifiedNameToEntity);
Type enumerableType = typeof(IEnumerable<T>).MakeGenericType(tableType);
Beachten Sie, dass Assembly.GetType
ist in der Regel eine bessere Wahl, da Sie nur Namensraum-qualifizierten Namen verwenden können:
Assembly asm = typeof(SomeKnownType).Assembly;
Type tableType = asm.GetType(namespaceQualifiedNameToEntity);