在C#

时间:2019-05-07 09:49:04

标签: c# .net wcf

我正在使用“ for”或“ foreach”循环遍历DataTable,然后尝试使用“ Ref”将DataRow传递到另一个方法中以引用我需要修改的行。但是,然后我看到以下错误:

  

属性或索引器可能无法作为out或ref参数传递

我想将DataRow传递到我的方法中,因为这会否定其他代码块来更新原始DataTable。这可能吗?

我尝试了以下操作:

// Build request
for(int x = 0; x < (dt.Rows.Count -1); x++)
{
    if (dt.Rows[x]["FieldData"].ToString().Trim() == "Value")
    {
        // Do work
        DoWork.BuildRequest(ref dt.Rows[x], ref Result);
    }
}     

并且:

// Build request
foreach(DataRow row in dt.Rows)
{
    if (row["FieldData"].ToString().Trim() == "Value")
    {
        // Do work
        DoWork.BuildRequest(ref row, ref Result);
    }
}

1 个答案:

答案 0 :(得分:0)

正如其他人指出的那样,该引用很可能是不必要的。类已经通过引用传递,只有类型'Result'是由DoWork.BuildRequest修改的结构时,您才需要ref关键字(因为它们是按值复制的,而更改的值不会向上传播到调用堆栈)。为了清楚起见,将其删除可能是最佳选择。但是,如果不能,或者这是不能更改其签名的代码,则可以获取本地引用并将其传递。

foreach(DataRow row in dt.Rows)
{
  if (row["FieldData"].ToString().Trim() == "Value")
  {
    var dr = row;
    // Do work
    DoWork.BuildRequest(ref dr, ref Result);
  }
}