我知道boost_dec_float
和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
object
DataSet
,则应通过引用填写。
假设class
从数据库中获取数据。
答案 0 :(得分:1)
在这两种情况下,您都在函数中进行按值调用 - FillDataSet
。
这里的FillDataSet
函数似乎将数据复制到新的DataSet并返回它。因此创建了一个新对象。如果要使前一代码有效,则可能必须将参数作为引用传递给FillDataSet()函数。像这样的事情 - FillDataSet(ref ds)
。
另请参阅此 - https://msdn.microsoft.com/en-us/library/0f66670z.aspx
答案 1 :(得分:1)
首先要记住的是引用类型变量,并且通过引用传递两个完全不同的概念。这里传递对象的值(ds),即使它们是引用类型变量。
在上面提到的两种情况下,你实际上是在传递数据集的值,在第二种情况下,你将函数的返回值赋给变量,你必须看看这里
答案 2 :(得分:0)
对您的示例进行一点修改
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);
希望这可以解释这种情况。如果您有任何疑问,请发表评论。