首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表转换为纯字符串,与字符串模式完全相同。

将列表转换为纯字符串,与字符串模式完全相同。
EN

Stack Overflow用户
提问于 2018-08-23 14:05:14
回答 5查看 127关注 0票数 2

请检查下面的代码。我正在尝试将一个项目列表转换为具有特定字符串模式的普通字符串,您可以在代码注释中找到该模式。有一件事是,在转换过程中,我还需要删除ASIN属性的任何空白和:前的任何字符。如您所见,我已经尝试过.ToString(),但这不能转换列表值。知道我该怎么做吗?

代码语言:javascript
复制
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; }

    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-08-23 14:25:27

一种方法是编写一个接受ThirdPartyData对象并返回按您指定的格式设置的属性名称和值字符串的方法(如果您控制了类,并且相信这是类的最佳字符串表示,那么这段代码也可以放在ThirdPartyData类中的ToString()方法的覆盖中):

代码语言:javascript
复制
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}";
}

然后,您可以简单地将输出设置为使用':'字符连接每个项的字符串的结果:

代码语言:javascript
复制
string output = string.Join(":", tpd.Select(TpdToString));

样本

代码语言:javascript
复制
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...");
}

输出

票数 1
EN

Stack Overflow用户

发布于 2018-08-23 14:11:56

首先,定义一个方法将自定义类转换为所需的字符串表示形式:

代码语言:javascript
复制
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},...";
    }
}

然后将类实例映射到它们的字符串表示形式:

代码语言:javascript
复制
string[] tpdStrings = tpd.Select(t => t.ToExport()).ToArray();

然后使用所需的分隔符连接这些字符串:

代码语言:javascript
复制
string output = String.Join(":", tpdStrings);
票数 3
EN

Stack Overflow用户

发布于 2018-08-23 14:14:40

您可以按照下面的代码所示:重写Tostring,还可以使用string.join在main方法中创建字符串。我还建议使用Regex清除所有空空间,如下所示:

代码语言:javascript
复制
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}";
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51987737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档