c# - 自定义类的 IEnumerable 和 String.Join()

标签 c# collections tostring

我创建了一个类作为通用的 DataType 类。我这样做是因为我需要将混合类型对象的集合序列化为 JSON,并且我希望能够将完整的数据集创建为一个集合。像这样:

JSON.Serialize(new []
{
    new Chameleon("aDate", DateTime.Now),
    new Chameleon("aString", "FUBAR")
});

以下是我的实现的简化版本:

class Chameleon
{
    private String _type;
    private String _key;
    private Object _value;

    public Chameleon(String key, String value)
    {
        _type = "string";
        _key = key;
        _value = value;
    }

    public Chameleon(String key, DateTime value)
    {
        _type = "string";
        _key = key;
        _value = value;
    }

    public new String ToString()
    {
        // returns internal data, formatted data according to _type
    }
}

这一切都很好,但是当我尝试使用 String.Join()ToString() 集合中的 Chameleon 对象未被 String.Join() 方法调用;相反,我得到了通常的命名空间 + 返回的类名字符串。

为什么 String.Join() 没有调用我的自定义 ToString() 实现?我错过了什么?


这是我正在做的:

JSON.Serialize(String.Join<Chameleon>(",", new []
{
    new Chameleon("aDate", DateTime.Now),
    new Chameleon("aString", "FUBAR")
}));

最佳答案

我猜这是因为您将 ToString 定义为 new 方法,而不是覆盖它。请尝试使用此代码:

public override String ToString()
{
    // returns internal data, formatted data according to _type
}

关于c# - 自定义类的 IEnumerable 和 String.Join(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462079/

相关文章:

c# - 从使用方法作为参数的方法返回字符串

c# - SQLDataadapter 不适用于 GO

generics - 从通用集合中选择类型的子集

android-edittext - 如何仅检索 EditText 中的数字而不是整个字符串?

c# - Int32既然是值类型,为什么要继承.ToString()呢?

c# - 为什么 Count 不是无符号整数?

c# - 如何在 ToDictionary 转换中获取重复键?

java - 如何以正确的方式打印对象内容?

java - 比较对象图

java: 集合表达式在 "foreach"中计算了多少次