簡體   English   中英

C#清單 <GenericClass> (100)建設原則

[英]C# List<GenericClass>(100) Construction Principles

如果我執行以下操作:

List<GenericClass> listObj = new List<GenericClass>(100);

// Do I need this part too?
for (int i = 0; i < 100; i++)
{
    listObj[i] = new GenericClass();
}

基本上,我在問C#編譯器是否會自動為列表中的100個GenericClass對象中的每一個觸發GenericClass構造函數。 我在MSDN文檔以及StackOverflow上進行了搜索。

謝謝你的幫助。

那不是List工作方式。 指定容量時,它是初始容量,而不是列表中的項目數。 該列表不包含任何元素,直到您通過Add方法添加它們為止。 列表沒有最大容量。 並且由於您是通過Add方法添加對象的,因此,您必須先對其進行新建。

實際上,執行您在問題中提出的內容將引發ArgumentOutOfRange異常。

對於您正在做的事情,您需要使用一個數組。

var listObj = new List<GenericClass>();
listObj[0] = new GenericClass(); // ArgumentOutOfRange exception

這將起作用:

for (int i=0;i<100;i++)
{
    listObj.Add(new GenericClass());
}

這是您嘗試執行的操作:

var arrayObj = new GenericClass[100];
for (int i = 0; i < 100; i++)
{
    arrayObj[i] = new GenericClass();                
}

是的,您確實需要創建每個實例並將其添加到列表中。 看看此構造函數樣式的備注部分: http : //msdn.microsoft.com/zh-cn/library/dw8e0z9z.aspx

您要指定希望在列表中放入多少個元素,以便不必在每次向其添加新的GenericClass實例時都在后台調整列表的大小。

沒有! 它指定初始容量。

MSDN文章

列表的容量是列表可以容納的元素數量。 將元素添加到列表后,將通過重新分配內部數組來自動增加容量。

由於您不能直接使用List進行操作,因此可以使用輔助方法來生成一個生成器並使用List(IEnumerable collection)重載。

   class Program
    {
        static void Main(string[] args)
        {
            var list = new List<string>
            (
                Generator.New(() => new string('a', 5), 100)
            );

            list.ForEach((x) => Console.WriteLine(x));
        }
    }

    public static class Generator
    {
        public static IEnumerable<T> New<T>(Func<T> generator, int nCount)
        {
            for (int i = 0; i < nCount; i++)
            {
                yield return generator();
            }
        }

        public static IEnumerable<T> New<T>(Func<int,T> generator, int nCount)
        {
            for (int i = 0; i < nCount; i++)
            {
                yield return generator(i);
            }
        }
    }

確實可以,但是如果List可以立即支持此功能,那么效果就不那么好了。 該示例程序將打印100行,包括5個a字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM