如何使用IEnumerable<>创建CodeFunction2类型?

时间:2009-10-12 15:38:51

标签: c# code-generation envdte

我真的需要创建类似下面的内容,我正在构建2个类,第一个是名为tableNameAsSingular的类(即AddressEntity),在我的第二个worker类中我需要具有类似下面的内容

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总是为空

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

但是我在AddFunction方法

中收到“IEnumerable<ProductEntity> is not a valid identifier”错误消息

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

已成功使用以下内容:

string returnType = "System.Collections.Generic.IEnumerable<" + tableNameAsSingular + ">"; 
CodeFunction2 finderFunction = (CodeFunction2)entityServiceClass.AddFunction("Get" + table.Name, vsCMFunction.vsCMFunctionFunction, returnType, -1, vsCMAccess.vsCMAccessPublic, null);