1

どうすればこれを回すことができますか:

string x = "key:value|key:value|key:value|key:value";

これに?

List<myClass> listObj;

myClass 定義:

public class myClass
{
    public string keyName { get; set; }
    public string keyValue { get; set; }
}

LINQなどを使用してそれを行う方法が必要です:)事前に感謝します!

*注* 私は、これを分割してループする方法を知っていることを追加する必要がありますが、より良い方法が必要です:)

4

3 に答える 3

10

これには別のToList()呼び出しが必要になりますが、宣言的な性質からクエリ構文が好きです。

from s in x.Split('|')
let parts = s.Split(':')
select new myClass { 
    keyName = parts[0], 
    keyValue = parts[1] 
}

または、流暢な構文を使用できます。

x.Split('|')
 .Select(s => {
    var parts = s.Split(':');
    return new myClass { 
        keyName = parts[0], 
        keyValue = parts[1] 
    };
 }).ToList()
于 2013-07-18T15:01:31.767 に答える
0

Dictionary の代わりにカスタム クラスを使用する場合は、これを行います。

 var result = from y in x.Split('|')
             let obj = y.Split(':')
             select new myClass{keyName = obj[0], keyValue = obj[1]};

 var list = result.ToList();   
于 2013-07-18T15:08:43.527 に答える
0

まあ、あなたは本当に分割とループを避けたかったので...

public List<MyClass> Parse(string base, string workingName, string workingValue,
                           bool processingName = true, 
                           List<MyClass> workingList = null, int index = 0)
{
    if (workingList == null)
        workingList = new List<MyClass>();

    if (index >= base.Length)
    {
        return workingList;
    }
    if (base[index] = '|')
    {
        workingList.Add(new MyClass { keyName = workingName, keyValue = workingValue });
        return Parse(base, "", "", true, workingList, index + 1);
    }
    else if (base[index] = ':')
    {
        return Parse(base, workingName, "", false, workingList, index + 1);
    }
    else if (processingName)
    {
        return Parse(base, workingName + base[index], "", processingName, workingList, index + 1);
    }
    else
    {
        return Parse(base, workingName, workingValue + base[index], processingName, workingList, index + 1);
    }
}

しかし、あなたが大切にしているものを愛するために、それに少しでも似ていることは何もしないでください(そして、これはテストされていない手書きのコードなので、おそらくエラーがあります-物事を避けることについて冗談を言っているだけです)。

于 2013-07-18T15:12:13.703 に答える