列表,字符串和vs模板

时间:2014-02-13 10:49:22

标签: c# string list templates

我有一些带有一些值的字符串列表,我想制作某种变量来保存我将在模板文件中使用的代码。

例如,假设我有这3个字符串值的列表:configService,scaleCoefConfigService,sessionService。列表的名称是chItemName。

我需要生成这种代码,稍后我将解析为模板:

[Dependency("configService")]

[Dependency("scaleCoefConfigService")]

[Dependency("sessionService")]

所以我的问题是可以制作一些变量和机制来迭代你将列表中的每一项添加到变量中的字符串列表吗?

我试过这个:

foreach (var tp in controllerChecked)
{
   var genCode = "[Dependency](" '"'  + chItemName + '"'")] \n"
}

controllerChecked是对象的集合,其中一个对象值是我得到的名字:

var chItemName = controllerChecked.Select(c => c.Name).ToList();

这是列表chItemName获取这些字符串的方式。

但是当然不可能在列表中使用+,这种东西永远不会起作用。有人有更好的主意吗?

2 个答案:

答案 0 :(得分:1)

在您的示例中,您没有使用tp变量,其中包含controllerChecked中的每个值,一次一个。

您可以遍历chItemName列表并将结果添加到StringBuilder

StringBuilder codeBuilder = new StringBuilder();
foreach (string tp in chItemName)
{
    codeBuilder.AppendLine("[Dependency(\"" + tp + "\")]");
}

string code = codeBuilder.ToString();

如果controllerChecked包含更多信息,您也可以直接访问它:

StringBuilder codeBuilder = new StringBuilder();
foreach (var item in controllerChecked)
{
    string propertyName = item.Name.SubString(1);

    codeBuilder.AppendLine("[Dependency(\"" + item.Name + "\")]");
    codeBuilder.AppendLine("public " + item.Type + " " + propertyName + " { get; set; }");
    codeBuilder.AppendLine();
}

string code = codeBuilder.ToString();

PS。我肯定会将chItemName的名称更改为chItemNames,因为它是一个列表,但这当然取决于您。

答案 1 :(得分:0)

这非常好用。如果你能弄清楚如何做到这一点,我对此有点困难:

让我们说,除了一个chItemName列表,我还有两个:fName和chItemType,两者都是字符串列表。

我必须生成这种代码:

[Dependency("alarmsService")]
public IAlarmsService AlarmsService { get; set; }

[Dependency("jsonFactory")]
public IJSONFactoryService JsonFactory { get; set; }

[Dependency("dataBean")]
public IDataBean DataBean { get; set; } 

alarmsServise,jsonFactory和dataBean是chItemName的项目。 IAlarmsService,IJSONFactoryService和IDataBean是chItemType的项目。 AlarmsService,Json Factory和DataBean是fName列表的项目。

fName是我通过修剪列表中每个字符串的第一个字母从chItemType获得的列表:

List<string> fName = new List<string>();
foreach(var i in chItemType)
{
    var newName = i.Remove(0,1);
    fName.Add(newName);
}

因此,只有该列表不是controllerChecked列表的一部分。其中两个定义如下:

var chItemType = controllerChecked.Select(c => c.Type).ToList();
var chItemName = controllerChecked.Select(c => c.Name).ToList();

我能以某种方式编辑foreach,或者我可以使用StringBulider编写部分代码,之后将它们合并在一起吗?