【发布时间】:2016-08-31 17:11:52
【问题描述】:
我必须在我的公司维护一个多年前使用 C# 和旧 .NET Framework(可能是 2.0?)编码的旧项目。我将旧的源文件加载到 Visual Studio,它给了我一个错误:“CS1674 'IEnumerator':在 using 语句中使用的类型必须隐式转换为 'System.IDisposable'”当我尝试构建时它。
这是一个导致此错误的完整函数,最重要的是这部分:“using (IEnumerator enumerator = dataTable.Rows.GetEnumerator())”,有什么建议可以摆脱它吗?
我试图阅读其他类似的问题,但我无法用它们解决这个问题。是否有替代方法来编写此代码,或者我的编程环境可能是导致此问题的原因?
public void CompileDynamicCode()
{
base.Session.trace_enter();
try
{
try
{
DataTable dataTable = this.ChimneyTable;
if (dataTable.Rows.Count > 0)
{
this.oChimneys = new Chimney[dataTable.Rows.Count];
int num = 0;
using (IEnumerator enumerator = dataTable.Rows.GetEnumerator())
{
while (enumerator.MoveNext())
{
DataRow dataRow = (DataRow)enumerator.Current;
bool entryXRight = false;
bool posXRight = false;
bool calcSteps = true;
bool calcCatwalk = true;
bool calcPlatform = true;
bool calcFlashing = true;
int connectCatwalkTo = -1;
if ((int)dataRow["entryXFromRight"] == 1)
{
entryXRight = true;
}
if ((int)dataRow["posXFromRight"] == 1)
{
posXRight = true;
}
if (dataTable.Columns.Contains("calcSteps") && (int)dataRow["calcSteps"] == 0)
{
calcSteps = false;
}
if (dataTable.Columns.Contains("calcCatwalk") && (int)dataRow["calcCatwalk"] == 0)
{
calcCatwalk = false;
}
if (dataTable.Columns.Contains("calcPlatform") && (int)dataRow["calcPlatform"] == 0)
{
calcPlatform = false;
}
if (dataTable.Columns.Contains("calcFlashing") && (int)dataRow["calcFlashing"] == 0)
{
calcFlashing = false;
}
if (dataTable.Columns.Contains("catwalkConnection"))
{
connectCatwalkTo = (int)dataRow["catwalkConnection"];
}
this.oChimneys[num] = new Chimney((int)dataRow["index"], (int)dataRow["shape_index"], (int)dataRow["entry_shape_index"], (int)dataRow["entryX"], entryXRight, (int)dataRow["posX"], posXRight, (int)dataRow["posY"], (int)dataRow["sizeX"], (int)dataRow["sizeY"], (int)dataRow["sizeZ"], (ChimneyAccessTypeEnum)dataRow["access_type"], calcSteps, calcCatwalk, calcPlatform, calcFlashing, connectCatwalkTo, this);
num++;
}
goto IL_247;
}
}
this.oChimneys = new Chimney[0];
IL_247:
dataTable = this.ShapeTable;
if (dataTable.Rows.Count > 0)
{
this.oShapes = new BasicShape[dataTable.Rows.Count];
int num2 = 0;
foreach (DataRow dataRow2 in dataTable.Rows)
{
this.oShapes[num2] = new BasicShape((TopRowModeEnum)dataRow2["TopRowMode"], (EaveRowModeEnum)dataRow2["EaveRowMode"], (ShapeBehaviorEnum)dataRow2["Behavior"], num2, this);
num2++;
}
}
dataTable = this.ConnectorTable;
if (dataTable.Rows.Count > 0)
{
this.oConnectors = new Connector[dataTable.Rows.Count];
int num3 = 0;
foreach (DataRow dataRow3 in dataTable.Rows)
{
BasicShape selectShape = null;
BasicShape selectShape2 = null;
try
{
selectShape = this.oShapes[(int)dataRow3["Shape1Index"]];
}
catch
{
}
try
{
selectShape2 = this.oShapes[(int)dataRow3["Shape2Index"]];
}
catch
{
}
this.oConnectors[num3] = new Connector((ConnectorBehaviorEnum)dataRow3["ConnectorBehavior"], selectShape, selectShape2, (ShapeConnectingLineEnum)dataRow3["Shape1Line"], (ShapeConnectingLineEnum)dataRow3["Shape2Line"], this, num3, (ConnectorStartEndMode)dataRow3["StartMode"], (ConnectorStartEndMode)dataRow3["StopMode"]);
num3++;
}
}
}
catch (Exception ex)
{
base.Session.HandleException(ex);
throw ex;
}
this.DynamicObject = this.CreateFromScript();
}
catch (Exception ex2)
{
base.Session.HandleException(ex2);
throw ex2;
}
finally
{
base.Session.trace_exit();
}
}
【问题讨论】:
-
与您的问题无关,但可以使用
int.TryParse将空的 try 捕获替换为 if 块。
标签: c# idisposable ienumerator