iT邦幫忙

1

List 內有List的做法

  • 分享至 

  • xImage

小弟近期轉學C#
遇到一些問題
這次是有關於List的問題

class Form1:Form
{

    List<CSV_Info> List_CSV = new List<CSV_Info>();             //宣告CSV資訊清單
    main()
    {
        DirectoryInfo DirI_In = new DirectoryInfo(Text_In_Path.Text);   //輸入目錄資料
        DirectoryInfo[] DirI_Mian_Dir = DirI_In.GetDirectories();       //取得主目錄的File陣列

        foreach (DirectoryInfo DirI_Sub_Dir in DirI_Mian_Dir)
        {
            if (DirI_Sub_Dir.Exists)        //如果這是目錄
             {
                List_CSV.Add(   new CSV_Info()
                                {   ID = List_ID,
                                    Useful = true,
                                    Name = DirI_Sub_Dir.Name,
                                    Tag = new  List_Tag<TAG_Info>
                                }
                            );
            }
        }
    }
}
public class TAG_Info
{
    public int ID;      //這個Tag得唯一序號(之後可能也會用於放置位置)
    public bool Useful; //這個Tag有用
    public string Name; //這個Tag的名
}
public class CSV_Info
{
    public int ID;      //這個CSV得唯一序號(之後可能也會用於製作順序)
    public bool Useful; //這個CSV有用
    public string Name; //這個CSV的名
    public TAG_Info Tag;//這個CSV擁有的Tag
}

以上程序在Tag = new List_Tag<TAG_Info>這句會出現紅線
我預期會在那邊建立一個名為 List_Tag的List (架構是TAG_Info)
可是會紅線,不知道要怎麼解決

OS:光是開始使用就好難了@@,後續估計會針對這東西問不少問題

看更多先前的討論...收起先前的討論...
fillano iT邦超人 1 級 ‧ 2020-03-18 17:57:36 檢舉
應該是 List List_Tag = new List<TAG_Info>() 吧?
lazywayne iT邦新手 5 級 ‧ 2020-03-18 18:01:13 檢舉
List_CSV.Add( new CSV_Info()
{ ID = List_ID_CNT,
Useful = true,
Name = DirI_Sub_Dir.Name,
List List_Tag = new List<TAG_Info>()
}
這樣嗎?還是紅標得
lazywayne iT邦新手 5 級 ‧ 2020-03-18 18:02:47 檢舉
語法錯誤,必須是’,'。
CSV_info未包含 List_Tag
fillano iT邦超人 1 級 ‧ 2020-03-18 18:06:32 檢舉
你的CSV_Info沒有List_Tag這個成員阿,要先宣告。
lazywayne iT邦新手 5 級 ‧ 2020-03-19 08:41:40 檢舉
public TAG_Info Tag;//這個CSV擁有的Tag
這句不算宣告嗎?
fillano iT邦超人 1 級 ‧ 2020-03-19 11:00:19 檢舉
哪裡有List_Tag?沒看到阿?
ch_lute iT邦新手 5 級 ‧ 2020-03-19 13:41:58 檢舉
CSV_Info內的Tag是TAG_Info但你卻塞List_Tag<TAG_Info>給他,型別不符
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
海綿寶寶
iT邦大神 1 級 ‧ 2020-03-19 08:58:12
最佳解答

TAG_Info 是 TAG_Info
List 是 List
你把兩者弄混了

以下寫出兩者的比較
提供參考

順便提醒
有提問題就記得要去選最佳解答

using System;
using System.Collections.Generic;
					
public class Program
{
	public static void Main()
	{
		Console.WriteLine("Hello World");
		
		List<CSV_Info> List_CSV = new List<CSV_Info>();             //宣告CSV資訊清單
		List_CSV.Add( new CSV_Info()
                                {   ID = 100,
                                    Useful = true,
                                    Name = "subdirectory",
                                    Tag = new TAG_Info() {
										ID = 101, 
										Useful = true,
										Name = "tag"
									},
								 	List_Tag = new List<TAG_Info>() {}
                                }
					 );
	}
}
public class TAG_Info
{
    public int ID;      
    public bool Useful; 
    public string Name; 
}
public class CSV_Info
{
    public int ID;      
    public bool Useful; 
    public string Name; 
    public TAG_Info Tag;//這只是「一個」TAG_Info
	public List<TAG_Info> List_Tag;//這是個 List,內容型態是 TAG_Info
}
看更多先前的回應...收起先前的回應...
lazywayne iT邦新手 5 級 ‧ 2020-03-19 09:34:18 檢舉

我發現我提問打的程式碼內
忘記把我CSV_Info宣告List的地方貼上
這個List名為List_CSV並且會是這個Class內的全域變數
且在幫我看下,謝謝

lazywayne iT邦新手 5 級 ‧ 2020-03-19 09:34:27 檢舉

感謝提醒

lazywayne iT邦新手 5 級 ‧ 2020-03-19 09:37:56 檢舉

該CSV_Info的宣告已經重新編輯進發問中

YoChen iT邦研究生 1 級 ‧ 2020-03-19 09:50:00 檢舉

正解,推推

沒什麼差別
上面的程式碼已修改

1
japhenchen
iT邦超人 1 級 ‧ 2020-03-19 08:20:06

少了構建式

public class CSV_Info
{
    public int ID;      //這個CSV得唯一序號(之後可能也會用於製作順序)
    public bool Useful; //這個CSV有用
    public string Name; //這個CSV的名
    public List<TAG_Info> Tag;//這個CSV擁有的Tag

    public CSV_Info(){
        Tag = new List<TAG_Info>();
    }
}
lazywayne iT邦新手 5 級 ‧ 2020-03-19 09:34:11 檢舉

我發現我提問打的程式碼內
忘記把我CSV_Info宣告List的地方貼上
這個List名為List_CSV並且會是這個Class內的全域變數
且在幫我看下,謝謝

lazywayne iT邦新手 5 級 ‧ 2020-03-19 09:37:48 檢舉

該CSV_Info的宣告已經重新編輯進發問中

0
Tony_Tsai
iT邦新手 5 級 ‧ 2020-03-26 18:40:03

拍謝,那個命名有點頭痛,隨手改了一下

using System;
using System.Collections.Generic;
using System.IO;

public class Program
{
    public static void Main()
    {
        var path = string.Empty;

        //宣告CSV資訊清單
        var csvInfos = new List<CsvInfo>();

        //輸入目錄資料
        var dirInfo = new DirectoryInfo(path);

        // 取得主目錄的File陣列(X) => 這個是取得現在目錄底下的子目錄
        // 原始說明 => Returns the subdirectories of the current directory.
        var subDirectories = dirInfo.GetDirectories();

        for (int i = 0; i < subDirectories.Length; i++)
        {
            //如果這是目錄(X) => 如果這個目錄存在的話
            if (subDirectories[i].Exists)
            {
                csvInfos.Add(new CsvInfo()
                {
                    ID = i + 1, // ID自己看要怎麼放
                    Useful = true,
                    Name = subDirectories[i].Name,
                    Tags = new List<TagInfo>
                    {
                        new TagInfo(),
                        new TagInfo(),
                        new TagInfo()
                    }
                });
            }
        }

        Console.ReadLine();
    }

}

public class TagInfo
{
    public int ID;      //這個Tag得唯一序號(之後可能也會用於放置位置)
    public bool Useful; //這個Tag有用
    public string Name; //這個Tag的名
}

public class CsvInfo
{
    public int ID;      //這個CSV得唯一序號(之後可能也會用於製作順序)
    public bool Useful; //這個CSV有用
    public string Name; //這個CSV的名
    public List<TagInfo> Tags;//這個CSV擁有的Tag

    public CsvInfo()
    {
        Tags = new List<TagInfo>();
    }
}

我要發表回答

立即登入回答