我真的需要创建类似下面的内容,我正在构建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
”错误消息
答案 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);