簡體   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