nemo_87
nemo_87

Reputation: 4781

List, strings and vs Template

I'm having a list of strings whit some values and I want to make some kind of variable for keeping code that I will be using in template file.

For example lets say I have list with this 3 string values: configService, scaleCoefConfigService, sessionService. Name of the list is chItemName.

And I need to generate this kind of code that I will parse later into template:

[Dependency("configService")]

[Dependency("scaleCoefConfigService")]

[Dependency("sessionService")]

So my question is can make some variable and mechanism for iterating thou list of strings that adds every single item from list to variable?

I've tried this:

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

controllerChecked is collection of objects and one of the objects value is Name that I'm getting like this:

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

This is how the list chItemName is getting those strings.

But of course it is impossible to use + with lists and this kind of stuff will never work. Someone has better idea?

Upvotes: 0

Views: 84

Answers (2)

nemo_87
nemo_87

Reputation: 4781

This worked perfectly good. I have little bit harder version of this, if you can figure out how to do this:

Lets say that instead of one chItemName list I have 2 more: fName and chItemType, both are string lists.

And I have to generate this kind of code:

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

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

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

alarmsServise, jsonFactory and dataBean are items of chItemName. IAlarmsService, IJSONFactoryService and IDataBean are items of chItemType. AlarmsService, Json Factory and DataBean are items of fName list.

fName is list that I got from chItemType by trimming the first letter from each string in list:

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

So only that list is not a part of controllerChecked list. The othere two are defined like this:

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

Can I edit foreach somehow or maybe I can make parts of code with StringBulider and after that merged them together?

Upvotes: 0

C.Evenhuis
C.Evenhuis

Reputation: 26446

In your example, you are not using the tp variable, which contains will contain each of the values within controllerChecked, one at a time.

You could just iterate through the chItemName list and add the result to a StringBuilder:

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

string code = codeBuilder.ToString();

If controllerChecked contains more information, you could also directly access it:

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. I would definitely change the name of chItemName to chItemNames as it is a list, but that is up to you of course.

Upvotes: 1

Related Questions