1. 程式人生 > >利用out關鍵字向函式傳遞List引數遇到的問題

利用out關鍵字向函式傳遞List引數遇到的問題

引言

今天使用out關鍵字向函式傳遞List<T>引數遇到了一點問題,做個記錄。之前只是大概瞭解out關鍵字就是作為引用傳遞。

遇到的問題

今天先寫了如下程式碼:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static public void Main()
        {
            List<int> myArray = new List<int>();        
            FillArray(out myArray);
            Console.WriteLine("List.count: " + myArray.Count);
            Console.ReadLine();
        }

        static public void FillArray(out List<int> myArray)
        {
            myArray = null;                                   
            myArray.Add(1);// 這裡執行會出錯
} } }
執行到myArray.Add(1);處會報錯


定位問題出現在myArray = null;

查閱了資料獲悉,不必初始化作為 out 引數傳遞的變數,必須在方法返回之前為 out 引數賦值。
程式碼修改為:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Test1
    {
        static public void Main()
        {
            //List<int> myArray = new List<int>();        // 這裡不需要對myArray進行初始化
            List<int> myArray = null;
            FillArray(out myArray);
            Console.WriteLine("List.count: " + myArray.Count);
            Console.ReadLine();
        }

        static public void FillArray(out List<int> myArray)
        {
            myArray = new List<int>();                  // 需要對myArray重新分配儲存空間
            //myArray = null;                                
            myArray.Add(1);                             // 這裡執行會出錯   
        }
    }
}

當然也可以刪除程式碼片段1中的out關鍵字,通過值傳遞可以避免這個問題。


總結分析

這個問題總感覺解決的不徹底,沒有搞清楚myArray = null 與 myArray =new List<T>;這裡還有什麼問題存在。這次僅僅作為自己的總結,下次有新的想法再補充進來。

附上一些參考資料:

相關推薦

利用out關鍵字函式傳遞List引數遇到的問題

引言 今天使用out關鍵字向函式傳遞List<T>引數遇到了一點問題,做個記錄。之前只是大概瞭解out關鍵字就是作為引用傳遞。 遇到的問題 今天先寫了如下程式碼: using System; using System.Collections.Generic;

ajax後臺傳遞list引數

學習記錄:複習 使用ajax向後臺傳遞list引數 前臺 jsp頁面 <button onclick="login222();">測試</button> js function login222() { var l

C++函式的陣列引數函式傳遞陣列

C++學習之函式的陣列呼叫----、 當函式中的某個引數是陣列時,在引數名後加上一對中括號,比如int a[],表示引數a是一個數組。下面我們就來看這樣一個在一堆正數裡面找一個最大數的程式:(( #include "iostream.h" int max(int a

postman傳遞list引數給Springboot的controller

                post在raw中選擇,傳遞json格式的資料,資料格式,如下: [ &nbs

SSH 框架controllerjsp傳遞List jsp中使用el表示式獲取

  mvc可以使用ModelAndViev傳遞資料選擇跳轉的檢視 controller中的程式碼, 把一個模擬的表單studentListSimulate傳給ModelAndView @RequestMapping("/detial") public Model show

SSH 框架controllerjsp傳遞List jsp中使用el表達式獲取

color 表單 src 模擬 如何 bsp alt 分享 pri mvc可以使用ModelAndViev傳遞數據選擇跳轉的視圖 controller中的代碼, 把一個模擬的表單studentListSimulate傳給ModelAndView @Reques

C語言函式傳遞指標引數

  #include <stdio.h> void swap(int *a,int *b) { printf("address in swap():%p %p\n",a,b); int temp=*a; *a=*b; *b=temp; } i

函式傳遞物件(C++學習筆記 24)

一、使用物件作為函式引數 在向函式傳遞物件時,是通過 “ 傳值呼叫 ” 傳遞給函式的,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。因此函式中對物件的任何修改均不影響呼叫該函式的物件(實參)本身。 例 1 :使用物件作為函式引數 #include<iostream

指標8(應用指標函式傳遞陣列)

要在函式中使用實引數組元素或改變實引數組元素的值,有三種對應方法 1)實參用陣列名,形參用指標變數。 2)實參用指標變數,形參用陣列名 3)實參和形參都用指標變數 給出一道例題 應用函式與指標,對長度為10的一維陣列進行從小到大排序。 #include<stdio.h> vo

C++函式傳遞陣列

C++向函式傳遞陣列 陣列的儲存空間很大,如果能夠把它作為引數傳遞給函式,那麼就能發揮很大的作用了。比如本來一個選出最大數的max函式只能在兩個數或三個數裡面選出一個最大的數字,如果我們把陣列傳遞過去,它就能夠在一堆數字中選出最大的數了,這大大提高了程式的效率。當函式中的某個引數是陣列時,在

jsp中EL表示式後臺傳遞list集合物件

jsp頁面程式碼: <form:form id="update" modelAttribute="enterpriseNumInfoListSelf" action="${ctx}/enterprise/num/update" method="post"> <

JNI開發:Java呼叫C/C++函式傳遞Array引數並返回Array值

             此篇Java呼叫C/C++函式來實現給int陣列[12,45,67]的每個元素加17; java呼叫: int array[] = { 12, 45, 67 }; array = jniTools.intA

Android利用post方式給webview傳遞json引數

需求:利用webview開啟一個URL介面,並且利用post方式傳遞引數一個json字串的引數; 主要程式碼如下:省略了webview的設定 @Override public void on

python flask 通過ajax後臺傳遞陣列引數

ajax 像後臺傳遞引數,一般是字典的形式傳遞,但是如果字典的value的值是一個數組的話,通過request.form  獲取得到的結果是 None。這是就需要把陣列物件轉化為json字串,後臺才可

js如何陣列中新增物件並通過ajax後臺傳遞list資料

js動態向陣列新增物件,並通過ajax提交List資料到後臺 var data=[{name: '張三',age: 18,id: 1},{name: '李四',age: 22,id: 2}]; var test= []; for (var i = 0; i < data.le

如何OrderBy傳遞字串引數(Entity Framework)

AppBox 是基於 FineUI 的通用許可權管理框架,包括使用者管理、職稱管理、部門管理、角色管理、角色許可權管理等模組。 Entity Framework提供的排序功能  再來回顧一下上篇文章,載入使用者列表並進行排序資料庫分頁的程式碼: var q = DB.Users.Incl

JSPServlet傳遞陣列引數

今天需要做一個多選刪除功能,需要從JSP中獲取已勾選的多選框的值,傳遞到Servlet中進行刪除操作。 <input type="checkbox" name="checkProduct" value="${product.pid}"> <input ty

函式傳遞引數是原引數的副本

函式的傳遞的引數是原引數的副本    使用C語言程式設計,不可能不用到函式,但是函式的引數傳遞,我們是否真的清楚了呢。本文主要介紹C語言中函式傳遞的引數。。    函式的引數通常分為兩種,普通變數,指標變數。這些引數,將會被函式體呼叫,當讓,也可以傳入一些永遠不被函式呼叫的

c/c++函式傳遞指標並修改其指向的問題

一個用來交換兩個數的值的函式,眾所周知的錯誤寫法為: #include <iostream> using namespace std; void swap(int a, int b) { int t = a; a = b; b = t;

shell程式設計函式傳遞陣列

有時候 ,可能需要向函式中傳遞 陣列,這個時候,就需要向 函式中傳遞陣列, 本文以排序為例,簡單的演示如何向函式 傳遞陣列。 大家都知道 向函式中傳遞引數 可以用$1 這個變數即可。 但是 如果 要傳遞陣列 可能不行哦。 直接看下面的例子 #!/bin/bash fun