【问题标题】:how to string.join object array parameters with customize output如何将对象数组参数与自定义输出连接起来
【发布时间】:2021-05-02 02:53:23
【问题描述】:

我有一个这样的对象

    public class MyModel
    {
        public int Key { get; set; }
        public string Value { get; set; } 
    }

我有model 喜欢List<MyModel>

    model[0]=new MyModel(){Key = 1,Value ="Something"};
    model[1]=new MyModel(){Key = 3,Value ="Something else"};

我想要这个输出:

    1. Value is = Something //there is \n here
    3. Value is = Something else

所以分隔符是\nstring.join(" \n ", ? ) 我该怎么办?

这可能吗?我是这样做的,但我想知道我可以string.join() 这样做吗:

    var newArray = model.Select(x => ((x.Key)+". Value is ="+x.Value));
    string.join(" \n ",newArray );

对不起,我的英语不好......

【问题讨论】:

  • 你试过了吗?结果有什么问题吗?
  • 该方法被称为string.Join() 而不是string.join()。您应该删除分隔符中"\n" 之前的空格。但除此之外,您的代码似乎可以提供您想要的结果。
  • newArray 名字不好:Select 的结果是一个 IEnumerable,而不是一个数组
  • @Backs 是的,我的解决方案工作正常,但我想知道 string.join 是否可以在没有预先定制或 linq 的情况下做到这一点
  • @CaiusJard tnx bro 我下次会参加

标签: c# arrays string list join


【解决方案1】:
var modelList = new List<MyModel>(){
        new MyModel(){ Key = 1, Value = "Value 1"},
        new MyModel(){ Key = 3, Value = "Value 2 with Key3"}
    };
    
    var stringArray = modelList.Select(model=> $"{model.Key}. Value={model.Value}");
    var finalString = String.Join('\n', stringArray);
    Console.Write(finalString);

https://dotnetfiddle.net/buCe8P

【讨论】:

  • 不是和我的方案一样吗?只是 select 中的语法不同
  • @BMErEr 所以是的。我刚刚回答,因为你问。我有 10 多年的 C# 经验,我们经常使用 String.Join() 方法。所以“我想学习我可以 string.join() 这样做吗”是的,你可以,而且这是正确的方法!更好的解决方案是String.Join(Environment.NewLine, stringArray);,更好的是使用StringBuilder
【解决方案2】:

你做得很好。还有其他方法,但它们不再正确(至少在某些情况下)。

自定义 ToString 方法示例:

var all = string.Join("\n", model);
public class MyModel
{
    public int Key { get; set; }
    public string Value { get; set; }

    public override string ToString() => $"{Key}. Value Is: {Value}";
}

或者直接用项目数组:

var all = string.Concat(model.Select(x => $"{x.Key}. Value Is: {x.Value}\n"));

但最后有一个不必要的线刹车。

【讨论】:

  • 从 ToString 中删除 \n 并通过 string.Join 完成
  • 直接在ToString() 中添加换行符是一个坏主意,因为这样消费者无法决定是否有换行符。为什么不使用string.Join() 并使用换行符作为分隔符?
猜你喜欢
  • 2013-01-24
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 2017-07-27
  • 1970-01-01
  • 2014-05-02
相关资源
最近更新 更多