Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Range[]而不是get_Range()_C#_Excel_Methods_Properties - Fatal编程技术网

C# Range[]而不是get_Range()

C# Range[]而不是get_Range(),c#,excel,methods,properties,C#,Excel,Methods,Properties,它表示使用Range属性而不是get_Range(Object Cell1,Object Cell2) 它们都在做相同的事情,获取一个Microsoft.Office.Interop.Excel.Range对象,该对象表示一个单元格或一组单元格。那么,除了这是一个方法和另一个是属性之外,还有什么区别呢?他们为什么要使用Range[],原因是什么?我使用了这两种方法,并且都返回了相同的结果。我认为Range[]实际上在内部使用get_Range() 对于命名约定的问题,我现在只使用Range[.R

它表示使用Range属性而不是get_Range(Object Cell1,Object Cell2)


它们都在做相同的事情,获取一个Microsoft.Office.Interop.Excel.Range对象,该对象表示一个单元格或一组单元格。那么,除了这是一个方法和另一个是属性之外,还有什么区别呢?他们为什么要使用Range[],原因是什么?

我使用了这两种方法,并且都返回了相同的结果。我认为Range[]实际上在内部使用get_Range()

对于命名约定的问题,我现在只使用Range[.

Range()比Range[]快

通过实践,我们已经注意到了这一点。但这里应该定义这样说的理由

当您要引用绝对范围时,此快捷方式非常方便。但是,它不如Rangeproperty灵活,因为它不能将变量输入作为字符串或对象引用处理。因此,在一天结束时,你仍然会提到漫长的道路。虽然shorty提供了可读性。因此,在没有更多资源投入的情况下,我们不妨在第一轮就把它做好

现在为什么它慢了?在编译过程中

“在运行时,Excel总是使用传统的表示法(或者我被告知如此),因此在编译代码时,快捷方式表示法中的所有引用都必须转换为传统的范围形式(或者我被告知如此)。{ie[A150]必须转换为范围(“A150”)形式}。不管我说的是什么,Visual Basic都必须记住编译后的代码版本和编写代码时使用的任何符号(即代码模块中的任何符号),因此文件大小(使用的内存)的工作簿属性略有增加。”

正如你所看到的,我的答案更符合VBA。然而,经过一些研究,有点证明VBA端并没有做太多的减速。所以你只需要照顾好C面@汉斯从C#的角度给了你一个更好的答案。希望将这两者结合在一起,您将获得性能优异的代码:)

以下是有关Excel中Range[]与Range()性能的一些发现

如果使用C#版本4及更高版本,则可以使用范围索引器。但在早期版本中必须使用get_Range()


请注意,它有一些特殊之处,COM接口的默认属性映射到索引器。但是范围属性不是工作表的默认属性,它只是一个常规属性。问题是,C#不允许声明索引器以外的索引属性。在VB.NET中工作,而不是在C#中,您必须直接调用属性getter方法。根据大众的需求,C#团队在版本4(VS2010)中取消了这一限制。但仅在COM接口上,您仍然无法在自己的代码中声明索引属性。

可能是因为它不尊重C#命名约定……这真的是因为这一点还是仅仅是您的意见?如果你能详细说明原因,我真的很感兴趣。仔细想想,get_PROPERTYNAME是C#在幕后处理属性的方式(基本上属性被转换为使用该语法的get和set方法)。通常它们在编译时不可用,您需要以通常的方式调用属性,但在这种情况下(出于某种原因),它是可用的。因此,他们建议使用属性语法,因为它更正确(但我认为它们完全相同)。+1对于一个好问题,让我确认了几件事。我同意你的观点,我也使用了它们,它们都返回相同的结果。你认为其中一个更快吗?我怀疑@bonCodigo会问一个问题。bonCodigo,任何源代码的速度都更快,速度有多快?@bonCodigo我很高兴看到您的答案代码示例。顺便说一句,我希望浓度会在C上,而不是在VB上?!:-)@西尔卡:如果我没有看到第二篇伟大的文章,即使是我也会陷入黑暗,不是完全黑暗,而是有点多云;-)这一定是我本月最喜欢的Excel文章。MVP在这里谈论的正是我们的主题。因此,快捷方式的慢度主要是相当小的,考虑到通过range[]获得的灵活性,您可以忽略它。我希望我能得到更多更深层次的信息。现在你有一个选择:-)谢谢你的努力!这本书让我对一些事情有了更全面的了解。对我来说,这个简单的陈述就足以作为一个答案,尽管它是关于VBA的。“现在我要提前警告你,捷径法从来都不是最快的,但对我来说,它提供的清晰和简单通常会赢得胜利。说实话,速度差是适度的。但大多数时候,微小的速度差是无关紧要的。”正是这句话改变了我的想法,不反对
Range[]
用法:)但是,就我个人而言,我将坚持使用
范围()就个人而言,我使用的是Range[]索引属性而不是get_Range()方法,这主要是因为它看起来比较干净,而且我还看到RSharper建议使用索引属性。这也让我问了自己我在这里发布的问题。当然,这很好,重点是当你使用旧版本的VS时,你不能。这就是为什么有两种方法可以做到这一点,这就是你问题的关键。谢谢你没有让我偏离我问题的关键。