C#:类返回值 - 还是有更好的方法?

nei*_*man 0 c#

我创建了一个类,其中包含一个List类型的成员.然后我可以添加到此使用ClassNameInstance.Add().

我们现在使用来自第三方的一些代码,这些代码将自动使用我创建的任何类及其值.列表除外.它只返回列表中的第一个元素.

我需要的是一个以逗号分隔的版本,而不是为此第三方代码使用.现在我可以将字符串附加到String成员,但这看起来不像.Add()方法.

所以我想创建自己的类,我可以有一个Add()方法,但可以访问它的单个值,如下所示:

MyClass1.Add("Test1");
MyClass1.Add("Test2");

Console.WriteLine(MyClass2);
Run Code Online (Sandbox Code Playgroud)

我想要的输出Test1, Test2.我希望这是有道理的!

UPDATE1:

似乎上面可能还不清楚.

public class MyClass1
{
    ????
}

public class MyClass2
{
    MyClass1 mc1 { get; set; }
    String name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

第三方代码将使用MyClass2及其分配的值.当我使用List而不是MyClass1时,我只获得列表中的第一个值,但需要CSV列表作为返回的String.

MyClass2 mc2 = new MyClass2();

mc2.mc1.Add("Test1");
mc2.mc1.Add("Test2");

Console.WriteLine(mc2.mc1) should output -> Test1, Test2
Run Code Online (Sandbox Code Playgroud)

希望能更清楚一些事情!

感谢大家!:)

UPDATE2:

似乎每个人都在暗示同样的事情 - 使用ToString().

不幸的是,第三方代码将查看我的类并自动确定成员类型和值.这意味着我无法通过调用ToString()返回的值传递代码.

我需要List <>的添加/删除功能,但在使用时,其值将返回单个CSV字符串.

Jon*_*eet 8

我不确定你需要额外的课程:

List<string> list = new List<string>();
list.Add("Test1");
list.Add("Test2");
Console.WriteLine(string.Join(", ", list.ToArray());
Run Code Online (Sandbox Code Playgroud)

可以将此行为包装在一个类中,以便自动调用它ToString:

public sealed class StringJoiningList
{
    private readonly List<string> list = new List<string>();

    public void Add(string item)
    {
        list.Add(item);
    }

    public override string ToString()
    {
        return string.Join(", ", list.ToArray());
    }
}
Run Code Online (Sandbox Code Playgroud)

现在假设你只是想要一个List<string>- 它也不允许你访问除方法之外的其他项目ToString().如果您能提供更多信息,当然所有这些都是可以解决的.你可能甚至只是派生自List<T>:

public class StringJoiningList<T> : List<T>
{
    public override string ToString()
    {
        return string.Join(", ", this.Select(x => x.ToString()).ToArray());
    }
}
Run Code Online (Sandbox Code Playgroud)

我不完全确定我喜欢这个主意,但这取决于你需要做什么......