Вы используете C# версию 4, синтетический метод get_Default() больше не генерируется. Интерфейс WorkSheet теперь имеет реального индексатора, вы используете его так же, как и в остальной части вашего кода. Fix:
range = (Range)worksheet.Cells[num2 + 10, num];
Вкратце опишите, что такое get_Default(). COM Automation обладает более гибким понятием свойств, поддерживает с индексом. Или, другими словами, свойства, которые могут принимать дополнительные аргументы. Он также позволяет объявлять свойство как свойство по умолчанию для интерфейса.
Язык C# исторически был очень строго об этом. Он поддерживает свойство по умолчанию, но имеет фиксированное имя: это. Индексатор класса. Он будет переименован в Item
, когда будет построена программа. И это должно иметь один аргумент. Это не так хорошо сочеталось с COM-взаимодействием, где свойство по умолчанию может иметь любое имя и произвольное количество аргументов. Интерфейс Range имеет эту проблему, у него есть свойство по умолчанию Value
, которое принимает два аргумента. Они также являются необязательными, что-то еще, что не поддерживалось на C#. Таким образом, импортер библиотеки типов работал над этим ограничением, синтезируя поддельный элемент с именем «По умолчанию». И сгенерировали методы get_Default() и set_Default() для поддержки двух аргументов.
C# версия 4 значительно улучшила это, теперь она поддерживает индексированные свойства. Но только в конкретном случае COM-взаимодействия. Если вы посмотрите на интерфейс Range с помощью Проводника объектов теперь вы не увидите:
dynamic this[[object RowIndex = System.Type.Missing],
[object ColumnIndex = System.Type.Missing]]
{ set; get; }
И get_Default() больше нет.
Поскольку такой метод не существует в интерфейсе Range: http://msdn.microsoft.com/en-us/library/office/microsoft.office.interop.excel.range_methods.aspx – Vinzz
@mehow может помочь любую альтернативу третьей строке кода – Nisar
@ Майли, что вы пытаетесь сделать, используя так называемый 'get_Default'? –