好的,所以这可能不可能,但是我想知道是否可以创建像这样的字典:
public static class TableList
{
public static Dictionary<string, JObject> Tables = new Dictionary<string, JObject>();
public static JObject GetTable(string ReturnTable)
{
Tables = new Dictionary<string, JObject>();
string[] files = Directory.GetFiles(FolderPath, "*.cs");
foreach (string FileName in files)
{
string FormattedFilename = FileName;
FormattedFilename = System.IO.Path.GetFileNameWithoutExtension(FormattedFilename);
FormattedFilename = char.ToUpper(FormattedFilename[0]) + FormattedFilename.Substring(1);
Tables.Add(FileName, TableDefinitions.FormattedFilename.TableDef());
}
if (Tables.ContainsKey(ReturnTable))
{
return Tables[ReturnTable];
}
else
{
return TableDefinitions.GenericTable.TableDef(ReturnTable);
}
}
}
我在源代码的一个目录中有很多配置文件(超过100个),唯一缺少的是使它们自动工作的方法是:
Tables.Add(file, TableDefinitions.File.TableDef());
我可以手动完成每一行,但是我喜欢在可能的情况下实现自动化。
答案 0 :(得分:1)
我假设您要在编译时查看目录,然后根据该目录创建代码。
您可以在编译之前使用“设计时T4”文本模板来创建代码。
编辑
我以前没有弄过这些模板,所以我想对您的特定问题大加赞赏。
在您的.tt
文件中,您可以使用以下代码:
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Windows.Forms" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".cs" #>
using System.Windows.Forms;
using System.Collections.Generic;
namespace Sandbox
{
public class TestClass
{
public static List<string> GetFiles()
{
List<string> filenames = new List<string>();
<#
string path = @"C:\Test";
foreach (var x in Directory.GetFiles(path))
{#>
filenames.Add(@"<#=x#>");
<#}#>
return filenames;
}
}
}
这将在.cs
文件中生成以下输出:
使用System.Windows.Forms; 使用System.Collections.Generic;
namespace Sandbox
{
public class TestClass
{
public static List<string> GetFiles()
{
List<string> filenames = new List<string>();
filenames.Add(@"C:\Test\A.txt");
filenames.Add(@"C:\Test\B.txt");
return filenames;
}
}
}
然后您可以从主代码中调用它:
var fileList = Sandbox.TestClass.GetFiles();