C#:拆分字符串并将结果分配给多个字符串变量

Hel*_*ein 12 c# string perl split

我有一个字符串,其中有几个字段由特定字符分隔,如下所示:

A,B,C

我想在逗号中拆分字符串,并将每个结果字段分配给它自己的字符串变量.在Perl中我可以像这样优雅地做到这一点:

my ($varA, $varB, $varC) = split (/,/, $string);
Run Code Online (Sandbox Code Playgroud)

在C#中实现相同结果的最简单,最优雅的方法是什么?

我知道我可以分成一个数组:

string[] results = string.Split(',');
Run Code Online (Sandbox Code Playgroud)

但是我必须通过他们的索引访问字段,例如结果[2].这很难阅读并且容易出错 - 考虑没有3个30个字段.出于这个原因,我更喜欢将每个字段值放在自己的命名变量中.

Rit*_*ton 8

我同意.隐藏在Adapter类中的拆分似乎是一个很好的方法,并且很好地传达了您的意图:

public class MySplitter
{
     public MySplitter(string split)
     {
         var results = string.Split(',');
         NamedPartA = results[0];
         NamedpartB = results[1];
     }

     public string NamedPartA { get; private set; }
     public string NamedPartB { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)


Lin*_*ron 7

您可以使用元组(在.Net 4中添加).MSDN中的元组

这个:

public class MySplitter
{
     public MySplitter(string split)
     {
         var results = split.Split(',');
         NamedPartA = results[0];
         NamedpartB = results[1];
     }

     public string NamedPartA { get; private set; }
     public string NamedPartB { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

可以用这样的东西来实现:

public Tuple<string,string> SplitIntoVars(string toSplit)
{
   string[] split = toSplit.Split(',');
   return Tuple.Create(split[0],split[1]);
}
Run Code Online (Sandbox Code Playgroud)

使用元组你可以使用:

var x = SplitIntoVars(arr);
// you can access the items like this:    x.Item1 or x.Item2 (and x.Item3 etc.)
Run Code Online (Sandbox Code Playgroud)

您还可以创建一个使用Tuple<string,int>等元组.

另外......我真的不喜欢参数,所以你模拟使用元组返回多个值(显然,也是不同类型).这个:

public void SplitIntoVariables(string input, out a, out b, out c)
{
    string pieces[] = input.Split(',');
    a = pieces[0];
    b = pieces[1];
    c = pieces[2];
}
Run Code Online (Sandbox Code Playgroud)

变成这样:

public Tuple<string,string,string> SplitIntoVariables(string[] input)
    {
        string pieces[] = input.Split(',');
        return Tuple.Create(pieces[0],pieces[1],pieces[2]);
    }
Run Code Online (Sandbox Code Playgroud)

其他(更具想象力)选项可能是创建一个包含值的ExpandoObject(动态)(类似于ASP.NET MVC中的ViewBag)