【发布时间】:2021-05-25 09:53:27
【问题描述】:
如果对象是数组,我想返回它的字符串表示形式,如下所示:
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() 并连接结果。
【问题讨论】:
-
试试:string.Join(",", obj.ToArray());
-
@jdweng:这不会按原样编译。
标签: c#