我创建了一个类,其中包含一个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字符串.
我不确定你需要额外的课程:
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)
我不完全确定我喜欢这个主意,但这取决于你需要做什么......
| 归档时间: |
|
| 查看次数: |
7591 次 |
| 最近记录: |