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

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top