我有一个返回字符串数组的方法。在那个方法中我只处理一个字符串,我想把它作为一个字符串数组(一个只有一个元素的字符串数组,这是我的字符串→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
)的数组,然后返回它。
或者类似的东西(如果可能的话):
private static string[] FooterContent()
{
return GetMyData().ToArray();
}
关键是我不能简单地将返回类型从string[]
修改为string
,因为我使用的是从FooterContent
(字符串数组)返回的值以及其他类似的方法,如BodyContent
或HeadContent
,放入另一个接受字符串数组的通用方法WriteContent()
。
有一种优雅的方式吗?
谢天谢地。
答案 0 :(得分:8)
正如w0lf在评论中所建议的那样,创建数组的最简单方法就是:
return new[] { GetMyData() };
虽然你可以创建扩展方法,但我个人不会 - 如果你这样做,你绝对应该不称之为ToArray
,因为由于string
而Enumerable.ToArray
实现了string
,IEnumerable<char>
已经有了public static T[] ToSingleElementArray(this T value)
{
return new[] { value };
}
的含义。
如果你真的,真的想创建这个扩展方法,我会这样做:
return GetMyData().ToSingleElementArray();
然后你可以使用:
{{1}}
但正如我所说,我甚至不会创建扩展方法......
答案 1 :(得分:4)
你可以:
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();
}
答案 2 :(得分:3)
试试这个,
private static string[] FooterContent()
{
return new[] { GetMyData() };
}
答案 3 :(得分:1)
或者,您可以将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
,则任何其他代码都可以将其值设置为string
,string[]
或DataResult
,并隐式执行相反的转换。
我相信在你的情况下,这应该是最好的方法之一。