当您尝试将值设置为只读属性时会发生什么?

时间:2019-12-19 16:37:46

标签: c# excel

最近我一直在使用C#,遇到了这个奇怪的问题。在阅读文档并发现该属性为只读之前,我尝试为excel图表类的read-only属性设置一个值。

0100, 0110, 0120, 0121, 0122, 0123, 0124, 0125, 0130, 0140
-sometimes there will be 0100, 0110, 0122, 0123, 0124, 0125, 0140
-sometimes there will be 0100, 0121, 0122, 0123, 0124, 0125, 0140
-sometimes there will be 0100, 0122, 0123, 0125, 0130, 0140
etc

我收到此错误:

PSEUDO CODE dim readVariable as string for row = 1 to NumberOfRows readVariable = Table.Read (row,2) if readVariable = 0122 msgbox "row = " & row " & " is 0122" end if if readVariable = 0125 msgbox "row = " & row " & " is 0125" end if next

当我删除该行时,代码运行完美,因此,当我尝试为只读属性设置一个导致其“内存不足”的值时,使我想知道幕后发生了什么。 / p>

2 个答案:

答案 0 :(得分:0)

如果它是只读的,则可以编译该代码。 这意味着它不是只读的,但是文档说要将其视为只读。


已改正的问题:当您尝试分配给文档说是只读的可分配属性时会发生什么?

简短的回答:这有关系吗?

长答案:没有消息来源,很难说。您可以使用ILSpy对其进行调试,但简短的答案仍然适用。

答案 1 :(得分:0)

似乎您在阅读错误的文档。

我曾询问过您使用的类来自哪个命名空间。根据Interop程序集的文档,签名为:

public:
property System::String ^ Name { System::String ^ get(); void set(System::String ^ value); };

如您所见,有一个二传手。

您可以详细了解here

存在用于Office的工具的另一个版本(我想是包装器)。该人的签名不提供setter:

public string Name { get; }

有关该信息的更多信息,请参见here

Interop程序集在托管代码和非托管代码之间架起了桥梁,所以我有根据的猜测是,可能存在第二个版本(包装器)来管理您遇到的问题,或者它可能是另一个Interop实现。

正如其他人所述,如果未提供设置器,则您的代码将无法编译,但在这种情况下会编译。只是幕后有毛病。

更新:

我发现以下两个实现之间的区别:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/86a62151-fbf0-4584-a68c-83060fb95c3d/officeinteropexcel?forum=vsto

相关问题