2014-02-13 32 views
0

我有一个字符串白色的一些值的列表,我想做一些变量保持代码,我将在模板文件中使用。列表,字符串和vs模板

例如让我说我有这个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正在获取这些字符串。

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

+0

您不使用'tp',而是'chItemName'。你重命名一个而不是另一个? 'chItemName'从哪里来? –

+0

@ C.Evenhuis哦,你是对的,忘记了代码的一个重要部分,它解释了什么是chItemName,我会马上在后期添加它。 –

回答

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,因为它是一个列表,但这当然取决于您。

+0

是controllerChecked是列表,但不是那种列表。这是一个对象列表。所以基本上我需要把chItemName放在那个foreach中的字符串列表中。 感谢您的回复,我会马上尝试。 –

+0

@ nemo_87更新了我对你问题更新的回答:) –

+0

它的工作原理:D如果你知道答案,我还有一个问题。如果我使用3个不同的列表会怎么样?我会写新帖或更新第一篇文章,向你解释我在想什么。 :) –

0

这工作非常好。我有点更难的版本,如果你能想出如何做到这一点:

可以说,而不是一个chItemName列表我有2更多: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和是公司Databeans的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列表的一部分。该othere两个是这样定义的:

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

我可以以某种方式修改的foreach或者也许我可以做的部分代码与StringBulider,之后合并在一起?

+0

'controllerChecked'中是否有所有数据? IE浏览器。我们已经覆盖了'Name'属性,其他值也是'controllerChecked'中每个元素的属性? (已经更新了我的答案,以适应这一点) –

+0

@ C.Evenhuis好两个是类型和名称,但最后一个fName不是。 fName实际上是来自Type的子串的列表。我会更新我的文章,以便您可以看到它。 :) –

+0

我不吃午饭了:P看看你能否用我最新的答案解决问题。你应该能够把你的子字符串逻辑放在那个foreach中。 –