- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下代码:
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;
}
此代码的功能
我在这里所做的是获取一个只有一列的数据表。在那个专栏中,我在多行中有这样的内容:“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 的自动修复将注释行 [1] 中的“string[]”变为“object[]”。但现在它给了我相同的注释行警告 [1]。自动修复它会导致它以前的代码,所以它基本上是一个非常烦人的循环。
我不想通过评论禁用警告,因为我通常认为这是一种懒惰和糟糕的方法。但我没有看到任何其他方法来解决这个问题。我在我的代码中做错了什么吗?有没有办法在不抑制或忽略警告的情况下解决这个问题?
最佳答案
如果您的目标是删除该警告消息,只需更改第一行以生成对象数组而不是字符串。
object[] newRow = row[0].ToString().Split(';').Cast<object>().ToArray();
但是接下来的问题是,在枚举假定的新行期间是否真的有必要设计表的结构,或者甚至为了摆脱消息而进行的这种更改是否可能会花费您在 Cast<>
上花费的一些性能。和枚举
编辑:问题是没有真正的问题需要解决。您收到警告说某些事情可能 会发生。认识到 R# 警告并不意味着它肯定是错误也很好,它让你知道你应该关心那部分。
想象一下:
public static object[] GetTuples()
{
return new Tuple<string, int>[10]; // R# warning here
}
public static void Test()
{
object[] tuples = GetTuples();
tuples[0] = new Tuple<string, int>("", 1);
tuples[1] = ""; // this will crash process, but no R# Warnings here
}
与您描述的场景相比:
string[] parts = "some;string".Split(",");
table.Rows.Add(parts);
R# 无法区分这两种情况。您收到的警告在数学上是完全正确的。另一方面,作为开发人员,您知道它不会导致此警告针对的问题,因为您比 R# 更了解该代码。最好采用您是代码的主人,而 R# 只是有用的提示来源的想法,反之亦然。
这是完全正常的企业代码,在开发人员知道它是安全的同时愿意在代码库的其他部分启用它的地方包含 R# 抑制。
作为第二次编辑:我发布的代码实际上并没有隐藏任何(甚至是虚拟的)问题。它从“类型系统的角度”改变了发生的事情,虽然听起来几乎一样,但有点“大不同”:最初你已经创建了 string[] - 例如一些能够存储字符串的实体然后,您将此数组传递给需要 object[]
的方法并用它做点什么。这意味着从 string[]
转换至 object[]
会发生。在程序中,这意味着我给你对象 [],你可以在那里存储任何 System.object(例如,从那里继承的所有东西),但正如所解释的那样,这不是真的。
鉴于我们知道那里发生了什么,我们知道它没问题(您可以在此处检查 DataTable.cs:https://referencesource.microsoft.com/#System.Data/System/Data/DataTable.cs并确保在 Add(object[] params))
时不会有问题不会像前面提到的那样修改输入数组 - 但 R# 不知道这条信息。
在我的改变之后,你不再做那个转换了。您正在获取字符串数组,并通过将一个对象一个一个地转换为您正在创建全新数组的对象——而不仅仅是您之前数组的不同类型标识。希望这会有所帮助而不是混淆。
顺便说一句。另一个适当的解决方案是禁用这种警告,但这不是最好的方法:)
关于c# - resharper 协变数组转换 - 矛盾修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017694/
示例:我想要一个插入方法的模板。如果类被声明 sealed ,那么我想要声明的方法private .如果类不是 sealed ,那么我想要声明的方法protected virtual . 另一个例子。
我不记得我购买的是 C# 版本还是 C#+VB 版本,我想知道,因为您在购买升级到 R# 6 时需要了解这一点。 我在任何地方都找不到关于对话框。任何人都可以帮忙吗? 最佳答案 菜单中的“ReShar
任何人都知道我可以在哪里更改设置以阻止 resharper 在调试时将这些消息输出到输出窗口? 'JetBrains.ReSharper.TaskRunner.exe' (Managed): Load
我想将其完全关闭,而不得到任何解决方案范围的提示。我只看到我可以在哪里暂停但找不到关闭它的答案。 最佳答案 在Resharper 5.1中,通过取消选中ReSharper->选项->代码检查->设置下
如何在不卸载的情况下卸载 Resharper?我在一个项目中需要它,但它会干扰另一个项目。 最佳答案 工具 > 选项 > ReSharper > 暂停 关于resharper - 如何在不卸载的情况下
我想告诉 ReSharper 忽略我的项目中的一些文件。其中一些太大了(它们包含固定的测试数据)。他们中的一些人只是混淆了它(混杂了 Silverlight 和 .NET 代码)。 有没有办法通过在文
我希望能够为多个项目禁用 R#。有相当多的内容需要排除,这意味着在 VS 中为每个项目执行此操作并不理想(菜单:R# -> 选项 -> 代码检查 -> 设置 -> 编辑要跳过的项目)。 有人知道有什么
我有一些代码,其中有一系列“绿色”灯泡建议,Resharper 告诉我可以使用对象初始值设定项。 我一直在遗留代码中看到这种事情,其中有一些代码模式一遍又一遍地重复,Resharper 知道如何自
我知道如何导航到文件或类,但是我可以导航到类的方法吗? 哦,假设我正在查看不同类(class)的文件 最佳答案 关于我正确配置的键绑定(bind),之前的所有答案对我来说似乎都已过时/无效。 我说:
Resharper 的安装路径在我们尝试过的多台不同计算机上似乎有所不同。其中一个,默认位置是 C:\Program Files (x86)\JetBrains\Installations 在其他电脑
我刚刚为我的应用程序实现了一个自定义 MessageBox。我现在想用我的自定义实现替换对 MessageBox.Show() 的任何调用,即 MsgBox.Show()**。我意识到我可以通过简单的
我对 Resharper 有疑问 - 它的所有菜单选项都是灰色的,没有快捷方式可用... 我已经尝试使用修复选项运行安装程序 - 没有成功 还尝试卸载/重新安装 - 相同.. :( ReSharper
下周我将在我的同事面前谈论 Resharper 作为提高开发人员性能的工具。由于本次演讲的时间有限,问题是 - 哪些重新锐化功能比其他功能更值得讨论? 目前我能想到的是: 代码分析/突出显示 单元测试
此 question是相似的,但我的问题似乎是在未答复的评论中提出的。 我创建了一个 C# 类。我使用 alt-insert 添加构造函数。我向构造函数添加一个参数,然后使用 alt-enter 从该
我正在使用 this NetResource class将文件发送到网络驱动器,它看起来像这样: [StructLayout(LayoutKind.Sequential)] public class
Resharper 确实提示诸如由 WCF 服务引用之类的东西生成的 reference.cs 之类的文件。如何让 Resharper 完全跳过此类文件? 最佳答案 菜单 ReSharper -> O
我正在使用 Resharper(带有 StyleCop 插件,尽管我认为这与问题/答案无关)在我们的代码库中强制执行命名约定。除了一个异常(exception),这几乎在任何地方都非常有效。 对于测试
我是 ReSharper 的新手。 对于那些使用 Resharper 的人,有没有一种方法可以添加自定义代码分析规则? 例如,我可能有一条规则说所有私有(private)变量都应该以字母“m”开头。我
这段代码: IEnumerable> numbas = new[] {new[] {0, 1}, new[] {2}, new[] {3, 4, 5}}; var flattened = numbas
是否可以更改 Resharper 格式化属性的方式? 我不喜欢: public string Foo { get { return bar; } set
我是一名优秀的程序员,十分优秀!