bp-KeyWord-params

params

在學習Task.WhenAll的過程中發現該keyword


翻譯:n. 參數; 參數個數


MSDNhttps://msdn.microsoft.com/zh-cn/library/w5zay9db


MSDN解釋

1.使用 params 關鍵字可以指定採用數目可變的參數的方法參數。

2.可以發送參數聲明中所指定類型的逗號分隔的參數列表或指定類型的參數數組。 還可以不發送參數。 如果未發送任何參數,則 params 列表的長度爲零。

3.在方法聲明中的 params 關鍵字之後不允許任何其他參數,並且在方法聲明中只允許一個 params 關鍵字


MSDN解釋分析

1.是用途,2和3是解釋怎麼使用

提煉關鍵字有:
指定類型、
逗號分隔、
沒有參數(MSDN把傳參叫做發送參數,,,,)、
被修飾的參數是最後一個參數、
一個方法僅能有一個該keyword


Demo

static void TryUseParams()
{
   TryUseParams("我在嘗試發送5個參數", 1,2,3,4,5);
   TryUseParams("我在嘗試發送2個參數", 33,2);
}

static void TryUseParams(string title,params int[] array)
{
   if (array.Length != 0)
   {
       Console.WriteLine("Start Print {0}!", title);
       for (int i = 0; i < array.Length; i++)
       {
          Console.WriteLine(i);
       }
   }
}

Demo效果


Case

public static Task WhenAll(params Task[] tasks);
public static Task WhenAny(params Task[] tasks);
最常用的public static void WriteLine(string format, params object[] arg)居然就這樣實現的


嘗試自己去實現WriteLine()

static void UseMyWriteLine()
{
     OverrideWeiteLine("{0}我嘗試{1}我自己實現的---{2}---", 2, "自己", "WriteLine");
}

static void OverrideWeiteLine(string stringFormat, params object[] arg)
{
    var stringBuilder = new StringBuilder();

    for (int i = 0; i < arg.Length; i++)
    {
        stringBuilder.AppendFormat(stringFormat, arg[i]);
    }
    Console.WriteLine(stringBuilder.ToString());
}

這樣的實現並沒有成功,在沒有實現成功的情況下,想如果能看到源碼就好了,查到原來可以做到
https://referencesource.microsoft.com/#q=console.writeline

深入幾層發現Console.WriteLine封裝中調用string.Format(stringFormat, arg)來實現


You Can!

發佈了206 篇原創文章 · 獲贊 123 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章