2014-02-13 56 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中。 –