[英]Is DataSet or DataTable value type in c#?
我知道DataSet
和DataTable
是类,因此它们必须是引用 类型 。
但是,无论何时以任何方法传递它们,我都必须return ds
或dt
来填充它们。
例:
DataSet ds = new DataSet();
FillDataSet(ds); //This get data from database
这不会填满我的数据集,但会填满一个。
DataSet ds = new DataSet();
ds = FillDataSet(ds); //This get data from database
我无法理解,如果我要发送DataSet
class
的object
,则应通过引用填充它。
假设FillDataSet(ds)
从数据库获取数据。
在这两种情况下,您都在功能FillDataSet
中执行按值调用。
这里的FillDataSet
函数似乎将数据复制到新的DataSet并返回它。 这样就创建了一个新对象。 如果要使以前的代码起作用,则可能必须将参数作为引用传递给FillDataSet()函数。 像这样的东西FillDataSet(ref ds)
。
另请参阅此-https : //msdn.microsoft.com/en-us/library/0f66670z.aspx
您必须记住的第一件事是引用类型变量和按引用传递是两个完全不同的概念。 即使它们是引用类型变量,也要在此处传递object(ds)的值。
在上面提到的两种情况下,您实际上都在传递数据集的值,在第二种情况下,您正在将函数的返回值分配给变量,则必须在此处查看
对您的示例进行一些修改
class Program
{
static void Main(string[] args)
{
DataSet ds = new DataSet();
FillDataSet(ds);
}
private static void FillDataSet(DataSet ds)
{
DataSet ds2 = new DataSet();//Say you have created an new instance of Class DataSet.
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
ds2.Tables.Add(dt);
ds = ds2; //here ds is now referencing address of ds2 created by new DataSet()
}
}
现在,因为你的ds
是不是ds
你送入FillDataSet(ds)
方法,
这种情况等同于如果您要完成ds = new DataSet();
在FillDataSet(ds);
内部FillDataSet(ds);
希望这可以解释情况。 如有任何疑问,请发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.