2

我真的需要创建类似以下的内容,我正在构建 2 个类,第一个是名称为 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 始终为空

当我这样做时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 回答