【发布时间】:2016-12-07 12:37:07
【问题描述】:
我有以下代码:
private static DataTable MyMethod(DataTable oneColDataTable)
{
DataTable result = new DataTable();
foreach (DataRow row in oneColDataTable.Rows)
{
string[] newRow = row[0].ToString().Split(';'); // [1] Co-variant array conversion when object[]
while (newRow.Length > result.Columns.Count)
{
result.Columns.Add(new DataColumn());
}
result.Rows.Add(newRow); // [2] Co-variant array conversion
}
return result;
}
此代码的功能
我在这里做的是使用一列的 DataTable。在该列中,我在多行中有这样的内容:“This;Is;the;first;row” - “This;Is;another;row;that;has;more;words”; 我拆分此信息,然后将单词解释为该行的列值。基本上将其转换为具有多行的表,如下所示:
Content of my DataTable:
|This|Is|the |first|row | | | |
|This|Is|another|row |that|has|more|words|
协变数组转换 - 问题
ReSharper 在评论 [2] 中警告我“协变数组转换”。 resharper 的 Auto-Fix 将注释 [1] 行中的“string[]”变为“object[]”。但现在它给了我同样的评论行警告[1]。自动修复这会导致它之前的代码,所以它基本上是一个非常烦人的循环。
我不想通过评论禁用警告,因为我通常认为这是一种懒惰和糟糕的方法。但我没有看到任何其他方法来解决这个问题。我在我的代码中做错了吗?有没有办法在不抑制或忽略警告的情况下解决此问题?
【问题讨论】:
-
确实如此。当 Rows.Add 只接受对象数组时,Split 返回字符串。
-
我现在正在使用最新的 R# Ultimate 进行处理,如果您按照 Smogen 的描述进行操作,您确实会收到上述消息。不确定您正在使用哪个版本进行测试。
-
@HimBromBeere 你必须阅读文本。第二个的修复将第一个的类型更改为
object[]。
标签: c# arrays resharper warnings