簡単なカンマ区切りの文字列を作成するために使用する簡単なヘルパー クラスがあります。
private string AddcsvString(string s)
{
if(string.IsNullOrWhiteSpace(this.Value))
{
return s;
}
else
{
return this.Value + "," + s;
}
}
これを呼び出すジェネリックメソッドもあります
public void Add<T>(T s) where T: struct
{
this.Value = AddcsvString(s.ToString());
}
ジェネリック List のオーバーロードを追加したかった
public void Add<T>(IEnumerable<T> values)where T:struct
{
foreach (T t in values)
{
Add(t.ToString());
}
}
しかし、これを呼び出そうとすると、最初のジェネリック メソッドが呼び出されます。そこで、2 番目のジェネリック メソッドの名前を AddAll に変更しました。最終的には、これがこのケースの正しい方法だったと思いますが、将来の参考のために両方を持つことが可能かどうかを知りたい.
--edit これはうまくいかないケースです
CsvString test = new CsvString();
string result;
test.Add(1);
test.Add('2');
test.Add("3");
result = test.ToString(); // result = "1,2,3"
CsvString test2 = new CsvString();
List<long> aList = new List<long>();
string result2;
aList.Add(1);
aList.Add(2);
aList.Add(3);
test2.Add(aList); //line doesn't compile
--edit 2 2 番目の解決策を見つけました (ただし、以下の JoshE はこれに回答した功績を認められていますが、ところで感謝します)。2番目の方法をこれに変更しました
public SWcsvString Add<T,K>(T values)where T: IEnumerable<K> where K: struct
{
foreach (K k in values)
{
Add(k.ToString());
}
return this;
}
そしてこれへの呼び出し
test2.Add<IEnumerable<long>,long>(aList);