将任何对象数组格式化为字符串
c#
如果对象是数组我想返回它的字符串表示如下:
using System;
using System.Linq;
using Xunit;
using Xunit.Abstractions;
namespace Tests.UnitTests
{
enum TestEnum {
A,
B
}
public class MyClass {
private readonly ITestOutputHelper _testOutputHelper;
public static string ObjectToString(object? obj) {
if (obj?.GetType().IsArray == true)
{
return string.Join(",", obj); // <-- does not work, returns "Tests.UnitTests.TestEnum[]"
return string.Join(",", ((object[]) obj).AsEnumerable()); // <-- does not work, throws "Unable to cast object of type 'Tests.UnitTests.TestEnum[]' to type 'System.Object[]"
return string.Join(",", ((Enum[]) obj).AsEnumerable()); // <-- does not work, throws "Unable to cast object of type 'Tests.UnitTests.TestEnum[]' to type 'System.Enum[]'"
}
return obj?.ToString() ?? "<unknown>";
}
public MyClass(ITestOutputHelper testOutputHelper)
{
_testOutputHelper = testOutputHelper;
}
[Fact]
public void Test() {
var val = new TestEnum[] { TestEnum.A, TestEnum.B };
var result = ObjectToString(val);
_testOutputHelper.WriteLine($"RESULT: {result}");
}
}
}
通常我需要检查 obj 是否是数组,将其转换为“任何”数组并将其值映射到字符串。我该怎么做?在示例中,我使用了枚举,但我想让它适用于任何类型值的数组,只想在每个数组元素上调用 ToString() 并连接结果。
回答
您可以尝试投射到IEnumerable并使用Cast<Object>
public static string ObjectToString(object? obj)
{
if (obj is IEnumerable enumerable)
{
return string.Join(",", enumerable.Cast<Object>());
}
return obj?.ToString() ?? "<unknown>";
}
.Net 小提琴