2017-06-01 91 views
0

我有下面的类,如何在C#中打印[1,[2,3,8],[[]],10,[]]格式的对象列表?打印对象列表

public class InnerList 
{ 
    private int val; 
    private boolean isValue; 
    private List<InnerList> intList; 
} 
public string ConvertToString() 
{ 
    if (this.isValue) 
    { 
     return this.val + ""; 
    } 
    else 
    { 
     return this.intList.ToString(); 
    } 
} 

在我的来电者,我会用类似下面以打印格式的对象列表[1,[2,3,8],[[]],10 []

System.out.println(list); 

我的问题是如何在c#中实现这个?

+0

什么是“System.out.println()”? –

+1

这意味着我记得java中的Console.WriteLine()。然而,我不明白这里的主要目标。 – Progressive

+0

你能否提供有效的C#代码作为你想格式化为[[1,[2,3,8],[[]],10,[]]'的输入? – Enigmativity

回答

0

欢迎来到C#世界!

我不明白你想要做什么,但我可以告诉你我们是如何用C#做:

public class InnerList 
    { 
     public int Value 
     { 
      get 
      { 
       return this.intList.Count; 
      } 
     } 

     public bool HasValue { get; set; } 

     private List<InnerList> intList; 

     public static implicit operator string(InnerList list) 
     { 
      return list.ToString(); 
     } 

     public override string ToString() 
     { 
      if (this.HasValue) 
      { 
       return this.Value.ToString(); 
      } 
      else 
      { 
       return this.intList.ToString(); 
      } 
     } 
    } 
1

Solution:

public class InnerList 
{ 
    //public only for simple initialization at usage example 
    public int val; 
    public bool isValue; 
    public List<InnerList> intList; 

    public override string ToString() 
    { 
     if (isValue)    
      return val.ToString();     
     return String.Format("[{0}]", intList == null ? "" : String.Join(", ", intList.Select(x => x.ToString()))); 
    } 
} 

用法:

var test = new InnerList 
{ 
    intList = new List<InnerList> { 
     new InnerList { isValue = true, val = 1 }, 
     new InnerList { isValue = true, val = 2 }, 
     new InnerList 
     { 
      intList = new List<InnerList> { 
       new InnerList { isValue = true, val = 13 }, 
       new InnerList { isValue = true, val = 23 }, 
       new InnerList() 
      } 
     } 
    } 
}; 
Console.WriteLine(test);//[1, 2, [13, 23, []]] 
+1

很好的解决方案。只是一个建议 - 你可以简化你的'return'到'return String.Format(“[{0}]”,intList == null?“”:String.Join(“,”,intList.Select(x => x.ToString())));'。 – Enigmativity

0

它看起来像你可能遇到了在这里循环它们引用的问题。因为InnerList可以在其intList中引用其自己的父项。这就是为什么我会推荐一个序列化器来为你完成这项工作。它知道如何处理这些循环引用。我在这里使用Newtonsoft.Json

public override string ToString() 
{ 
    var settings = new JsonSerializerSettings(); 
    settings.PreserveReferencesHandling = PreserveReferencesHandling.All; 
    return JsonConvert.SerializeObject(this, settings); 
}