最近我一直在使用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>
答案 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实现。
正如其他人所述,如果未提供设置器,则您的代码将无法编译,但在这种情况下会编译。只是幕后有毛病。
更新:
我发现以下两个实现之间的区别: