繁体   English   中英

即时将字符串转换为字符串数组

[英]Convert string to an array of strings on the fly

我有一个返回字符串数组的方法。 在那个方法中,我只处理一个字符串,我想将它作为一个字符串数组返回(一个只有一个元素的字符串array[0] == myString ,即我的字符串 → array[0] == myString )。

我想要那个,因为我想避免使用一些丑陋的代码来创建一个包含一个元素的字符串数组,如下所示:

private static string[] FooterContent()
{
      string[] array = new string[1];
      array[0] = GetMyData();
      return array;        
}

我想要这样的东西:

private static string[] FooterContent()
{
      string myData = GetMyData();
      return myData.ToArray();        
}

并且myData.ToArray()应该创建一个只有一个元素( array[0] = myString )的array[0] = myString ,然后返回它。

或者,类似的东西(如果可能):

private static string[] FooterContent()
{
     return GetMyData().ToArray();        
}

关键是我不能简单地将返回类型从string[]修改为string因为我将从FooterContent (字符串数组)和其他类似方法(如BodyContentHeadContent )返回的值用于另一个通用方法WriteContent()接受字符串数组。

有没有一种优雅的方式来做到这一点?

恭敬地谢谢你。

正如 w0lf 在评论中建议的那样,创建数组的最简单方法就是:

return new[] { GetMyData() };

虽然你可以创建一个扩展方法,我个人不会-如果你这样做,你绝对应该把它ToArray ,因为这已经有一个含义string由于Enumerable.ToArray和事实, string工具IEnumerable<char> .

如果你真的,真的想创建这个扩展方法,我会这样做:

public static T[] ToSingleElementArray(this T value)
{
    return new[] { value };
}

然后你可以使用:

return GetMyData().ToSingleElementArray();

但正如我所说,我什至不会创建扩展方法......

你可以:

private static string[] FooterContent()
{
    return new[] { GetMyData() };        
}

或编写扩展方法,这不是这里的最佳方法(但可能):

public static class StringExtensions
{
    public static string[] ToSingleElementArray(this string inputString)
    {
        return new[] { inputString };
    }
}

private static string[] FooterContent()
{
    return GetMyData().ToSingleElementArray();        
}

尝试这个,

private static string[] FooterContent()
{
     return new[] { GetMyData() };
}

或者,您可以将GetData返回值包装在一个struct并使用隐式运算符来执行转换:

public struct DataResult
{
    private string _raw;
    private string[] _rawArray;

    public DataResult(string raw)
    {
        _raw = raw;
        _rawArray = new [] { raw };
    }

    private string Raw { get { return _raw; } }
    private string[] RawArray { get { return _rawArray; } }

    public static implicit operator string(DataResult result)
    {
        return result.Raw;  
    }

    public static implicit operator DataResult(string rawResult)
    {
        return new DataResult(rawResult);
    }

     public static implicit operator string[](DataResult result)
     {
         return result.RawArray;
     }

    public static implicit operator DataResult(string[] rawResultArray)
    {
        if(rawResultArray == null || rawResultArray.Length != 1)
            throw new ArgumentException("Raw result must be a single item array", "rawResultArray");

        return new DataResult(rawResultArray[0]);
    }
}

隐式运算符允许您进行从苹果到梨的隐式转换(反之亦然):

DataResult result = new DataResult("hello world");
string[] resultArray = result;
string rawResult = result;

DataResult result2 = new string[] { "hello world" };
DataResult result3 = "hello world";

这是什么意思? 如果您的GetData方法返回DataResult任何其他代码可以将其值设置为stringstring[]DataResult ,并隐式执行相反的转换。

我相信在你的情况下,这应该是最好的方法之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM