使用c#和linq将分隔的字符串拆分为层次结构

sea*_*ean 9 c# linq

我有字符串用点('.')字符分隔,表示层次结构:

string source = "Class1.StructA.StructB.StructC.FieldA";
Run Code Online (Sandbox Code Playgroud)

如何使用C#和linq将字符串拆分为单独的字符串以显示其层次结构?如:

string[] result = new string[]
{
    "Class1",
    "Class1.StructA",
    "Class1.StructA.StructB",
    "Class1.StructA.StructB.FieldA"
};
Run Code Online (Sandbox Code Playgroud)

Jef*_*ado 12

用分隔符分割字符串,取不同级别的1 ... N并重新加入字符串.

const char DELIMITER = '.';
var source = "Class1.StructA.StructB.StructC.FieldA";
var hierarchy = source.Split(DELIMITER);
var result = Enumerable.Range(1, hierarchy.Length)
    .Select(i => String.Join(".", hierarchy.Take(i)))
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

如果没有LINQ,这是一种更有效的方法:

const char DELIMITER = '.';
var source = "Class1.StructA.StructB.StructC.FieldA";
var result = new List<string>();
for (int i = 0; i < source.Length; i++)
{
    if (source[i] == DELIMITER)
    {
        result.Add(source.Substring(0, i));
    }
}
result.Add(source); // assuming there is no trailing delimiter
Run Code Online (Sandbox Code Playgroud)