将任何对象数组格式化为字符串

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 小提琴


以上是将任何对象数组格式化为字符串的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>