2

私は本当に次のようなものを作成する必要があります.2つのクラスを構築しています.1つ目は tableNameAsSingular (ie AddressEntity) という名前のクラスです.

public IEnumerable<AddressEntity> GetAddressEntity()
{
 // the good stuff...
}

関数を作成するとき、私は次のものを持っています..

Type t = Type.GetType("IEnumerable<" + tableNameAsSingular + ">");
CodeFunction2 finderFunction = (CodeFunction2)entityServiceClass.AddFunction("Get" + table.Name, vsCMFunction.vsCMFunctionFunction, t, -1, vsCMAccess.vsCMAccessPublic, null);

ただし、t は常に null です

私が行うType.GetType(tableNameAsSingular)と、nullも返されます

どんな助けや指針も大いに受け取られるでしょう。また、EnvDTE コード生成の知識が豊富にある場所を誰かが知っていれば、私はとてもうれしいです!


アップデート

以下を使用して、文字列として試してみました。

   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.
    }

しかしIEnumerable<ProductEntity> is not a valid identifier、AddFunction メソッドで " " エラー メッセージが表示されます

4

2 に答える 2

3

構文IEnumerable<T>は C# 構文であり、.NET 構文 (バックティック、カウンターなどを使用) ではありません。つまり、次のとおりです。

Type tableType = Type.GetType(assemblyQualifiedNameToEntity);
Type enumerableType = typeof(IEnumerable<T>).MakeGenericType(tableType);

Assembly.GetType名前空間で修飾された名前を使用できるため、通常はこれがより適切な選択であることに注意してください。

Assembly asm = typeof(SomeKnownType).Assembly;
Type tableType = asm.GetType(namespaceQualifiedNameToEntity);
于 2009-10-12T15:44:43.037 に答える
1

次のように動作させることができました:

string returnType = "System.Collections.Generic.IEnumerable<" + tableNameAsSingular + ">"; 
CodeFunction2 finderFunction = (CodeFunction2)entityServiceClass.AddFunction("Get" + table.Name, vsCMFunction.vsCMFunctionFunction, returnType, -1, vsCMAccess.vsCMAccessPublic, null);
于 2009-10-14T13:51:36.097 に答える