请检查下面的代码。我正在尝试将一个项目列表转换为具有特定字符串模式的普通字符串,您可以在代码注释中找到该模式。有一件事是,在转换过程中,我还需要删除ASIN属性的任何空白和:前的任何字符。如您所见,我已经尝试过.ToString(),但这不能转换列表值。知道我该怎么做吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//asign some demo data
var tpd = new List<ThirdPartyData>();
tpd.Add(new ThirdPartyData { ASIN = "mark: NsQf8", type = 0, Price = 7, IsPrime = 1, OutOfStock = 1 });
tpd.Add(new ThirdPartyData { ASIN = "fD5tsQ ", type = 1, Price = 13, IsPrime = 0, OutOfStock = 0 });
tpd.Add(new ThirdPartyData { ASIN = "notmark: tvQtsu", type = 1, Price = 14, IsPrime = 1, OutOfStock = 1 });
//this tpd list should be converted string like bellow-
//Converted String output should be like this- 'ASIN-NsQf8,type-0,Price-7,IsPrime-1,OutOfStock-1:ASIN-fD5tsQ,type-1,Price-13,IsPrime-0,OutOfStock-0:ASIN-tvQtsu,type-1,Price-14,IsPrime-1,OutOfStock-1'
string output = tpd.ToString();//i tried it not works
}
}
class ThirdPartyData
{
public string ASIN { get; set; }
public int type { get; set; }
public int Price { get; set; }
public int IsPrime { get; set; }
public int OutOfStock { get; set; }
}
}发布于 2018-08-23 14:25:27
一种方法是编写一个接受ThirdPartyData对象并返回按您指定的格式设置的属性名称和值字符串的方法(如果您控制了类,并且相信这是类的最佳字符串表示,那么这段代码也可以放在ThirdPartyData类中的ToString()方法的覆盖中):
private static string TpdToString(ThirdPartyData input)
{
if (input == null) return null;
var asinParts = input.ASIN?.Split(':') ?? new[] {"[NULL]"};
var asin = asinParts.Length > 1 ? asinParts[1].Trim() : asinParts[0].Trim();
return $"ASIN-{asin},type-{input.type},Price-{input.Price}," +
$"IsPrime-{input.IsPrime},OutOfStock-{input.OutOfStock}";
}然后,您可以简单地将输出设置为使用':'字符连接每个项的字符串的结果:
string output = string.Join(":", tpd.Select(TpdToString));样本
private static void Main()
{
//asign some demo data
var tpd = new List<ThirdPartyData>
{
new ThirdPartyData {ASIN = "mark: NsQf8", type = 0, Price = 7, IsPrime = 1, OutOfStock = 1},
new ThirdPartyData {ASIN = "fD5tsQ ", type = 1, Price = 13, IsPrime = 0, OutOfStock = 0},
new ThirdPartyData {ASIN = "notmark: tvQtsu", type = 1, Price = 14, IsPrime = 1, OutOfStock = 1}
};
var output = string.Join(":", tpd.Select(TpdToString));
Console.WriteLine(output);
GetKeyFromUser("\nDone! Press any key to exit...");
}输出

发布于 2018-08-23 14:11:56
首先,定义一个方法将自定义类转换为所需的字符串表示形式:
class ThirdPartyData
{
public string ASIN { get; set; }
public int type { get; set; }
public int Price { get; set; }
public int IsPrime { get; set; }
public int OutOfStock { get; set; }
public string ToExport()
{
return $"ASIN-{ASIN},type-{type},...";
}
}然后将类实例映射到它们的字符串表示形式:
string[] tpdStrings = tpd.Select(t => t.ToExport()).ToArray();然后使用所需的分隔符连接这些字符串:
string output = String.Join(":", tpdStrings);发布于 2018-08-23 14:14:40
您可以按照下面的代码所示:重写Tostring,还可以使用string.join在main方法中创建字符串。我还建议使用Regex清除所有空空间,如下所示:
class Program
{
static void Main(string[] args)
{
//asign some demo data
var tpd = new List<ThirdPartyData>();
tpd.Add(new ThirdPartyData { ASIN = "mark: NsQf8", type = 0, Price = 7, IsPrime = 1, OutOfStock = 1 });
tpd.Add(new ThirdPartyData { ASIN = "fD5tsQ ", type = 1, Price = 13, IsPrime = 0, OutOfStock = 0 });
tpd.Add(new ThirdPartyData { ASIN = "notmark: tvQtsu", type = 1, Price = 14, IsPrime = 1, OutOfStock = 1 });
//this tpd list should be converted string like bellow-
//Converted String output should be like this- 'ASIN-NsQf8,type-0,Price-7,IsPrime-1,OutOfStock-1:ASIN-fD5tsQ,type-1,Price-13,IsPrime-0,OutOfStock-0:ASIN-tvQtsu,type-1,Price-14,IsPrime-1,OutOfStock-1'
var strings = new List<string>();
tpd.ForEach(item => strings.Add(item.ToString()));
string output =string.Join(",", strings);
}
}
class ThirdPartyData
{
readonly Regex WhiteSpaceRegex = new Regex("[ ]", RegexOptions.Compiled);
public string ASIN { get; set; }
public int type { get; set; }
public int Price { get; set; }
public int IsPrime { get; set; }
public int OutOfStock { get; set; }
public override string ToString()
{
string[] asin = ASIN.Split(':');
string asinString = string.Empty;
if (asin.Length >= 1)
{
asinString = WhiteSpaceRegex.IsMatch(asin[1]) ? WhiteSpaceRegex.Replace(asin[1], string.Empty).Trim() : asin[1]; ;
}
return $"ASIN-{asinString},type-{type},Price-{Price},IsPrime-{IsPrime},OutOfStock-{OutOfStock}";
}https://stackoverflow.com/questions/51987737
复制相似问题