gpt4 book ai didi

c# - 遍历一个类的属性

转载 作者:太空狗 更新时间:2023-10-29 21:40:52 27 4
gpt4 key购买 nike

我正在尝试编写一个 T4 模板来遍历项目文件夹(指定)并根据这些属性生成一个 js 文件。

我能够将我的第一个类文件作为 ProjectItem 返回(作为 System.__ComObject 返回)

我看到名称正确返回(“MyReadModel.cs”)

Public Class MyReadModel{
Public string MyName { get; set; }
public int MyAge { get; set;}
}

现在我正在努力从中返回属性。该文件有一个 FileCodeModel 作为 System.__ComObject。我找不到任何属性。

我尝试了以下操作:

projectItem.GetType().GetProperties()

但返回 System.Reflection.PropertyInfo[0]

关于我哪里出错的任何提示?它似乎被转换为 com 对象...也许这是错误的?

编辑:

引用文献:

http://www.olegsych.com/2008/07/t4-template-for-generating-sql-view-from-csharp-enumeration/

How to get T4 in VS2010 to iterate over class' properties

代码:

<# Prepare(this); #>
<# foreach(ProjectItem pi in FindProjectItemsIn(CurrentProject.ProjectItems.Item("Commands"))) { #>
<# WriteLine("found " + pi); #>
<# } #>

<#+
static DTE Dte;
static Dictionary<string, ResultTypeInfo> ResultTypes;
static TextTransformation TT;
static Microsoft.CSharp.CSharpCodeProvider codeProvider = new Microsoft.CSharp.CSharpCodeProvider();

static Project CurrentProject;

IList<ProjectItem> FindProjectItemsIn(ProjectItem start) {
var list = new List<ProjectItem>();
FindProjectItemsIn(start, list);
return list;
}

static bool IsFolder1(ProjectItem item) {
return (item.Kind == Constants.vsProjectItemKindPhysicalFolder);
}

void FindProjectItemsIn(ProjectItem start, IList<ProjectItem> list) {
foreach(ProjectItem item in start.ProjectItems) {
if(IsFolder1(item)) {
FindProjectItemsIn(item, list);
continue;
}
list.Add(item);
}
}


void Prepare(TextTransformation tt) {
TT = tt;
// Get the DTE service from the host
var serviceProvider = Host as IServiceProvider;
if (serviceProvider != null) {
Dte = serviceProvider.GetService(typeof(SDTE)) as DTE;
}

var projectItem = Dte.Solution.FindProjectItem(Host.TemplateFile);
CurrentProject = projectItem.ContainingProject;
}

最佳答案

为了获取给定源文件中包含的类/结构的属性列表,您可以执行以下操作(您可以使用 CodeClass 轻松获取类名等):

private IList<CodeProperty> GetProperties(string csFile)
{
ProjectItem projectItem = TransformationContext.FindProjectItem(csFile);
FileCodeModel codeModel = projectItem.FileCodeModel;
var propertyList = new List<CodeProperty>();
FindProperties(codeModel.CodeElements, propertyList);
return propertyList;
}

private void FindProperties(CodeElements elements, IList<CodeProperty> properties)
{
foreach (CodeElement element in elements)
{
CodeProperty property = element as CodeProperty;
if (property != null)
{
properties.Add(property);
}
FindProperties(element.Children, properties);
}
}

关于c# - 遍历一个类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9718147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com