当前位置:  开发笔记 > 编程语言 > 正文

C#指针问题

如何解决《C#指针问题》经验,为你挑选了2个好方法。

看一下下面的例子:

public void inc(int num) {
   num++;
}

int a = 5;
inc(a);

在这种情况下,inc不会增加a变量本身.它没有指向内存中的相同位置.为了改变a,我将不得不使用ref.

但是,在这个例子中

public static void ExportSelectedRow(GridView gridView, object toObject, int skipCols)
{
    GridViewRow gridViewRow = gridView.SelectedRow;

    if (toObject is DataTable)
    {
        DataTable returnDt = (DataTable)toObject;
        GridViewColsToDatatable(gridView, returnDt, skipCols);
        DataRow dr = returnDt.NewRow();
        for (int i = skipCols; i < gridViewRow.Cells.Count; i++)
            dr[i - skipCols] = gridViewRow.Cells[i].Text;
        returnDt.Rows.Add(dr);
    }

}

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) {
    DataTable dt = new DataTable();
    GridViewHelper.ExportSelectedRow(GridView1, dt, 1);
    ...
}

虽然我甚GridView1DataTable没有在函数中引用它,但所选行将从中导出.所以toObject会更新.看起来

DataTable returnDt = (DataTable)toObject;

实际上是引用了toObject.所以我的问题,为什么在这个例子中它是一个参考,但在第一个,它不是?



1> harold..:

与其他人要说的相反,默认情况下,C#中的所有内容(也是引用类型)都是按值传递的.随着ref还是out他们不是.
但是在引用类型的情况下,通过值传递的东西是引用.

int当然是值类型,DataTable是引用类型.


提升你,因为你是唯一一个绝对正确的人.其他人,请参阅http://www.mbaldinger.com/post/C-reference-types-are-passed-by-value!.aspx

2> Chad..:

C#有参数类型.值类型(结构,枚举,数字等)和引用类型(对象,字符串等).

在第一个示例中,值5传递给函数,但在第二个示例GridView1中传递了引用.

请参阅MDN以获取定义参数传递方式的值类型和引用类型的列表.

编辑

为了更好的定义,请参阅哈罗德的答案.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有