У меня есть класс .NET, который содержит простой массив строк, доступных через метод доступа, который выглядит следующим образом;
namespace Foo.Bar {
[ComVisible(true)]
[Guid("642279A0-85D4-4c7a-AEF5-A9FAA4BE85E5")]
public class MyClass {
private string[] _myArray;
public MyClass() { }
public MyClass(string[] myArray) {
_myArray = myArray;
}
public string[] MyArray {
get { return _myArray; }
}
}
}
Я использую этот класс с использованием Classic ASP;
Dim foo
Set foo = Server.CreateObject("Foo.Bar.MyClass")
if IsArray(foo.MyArray) then Response.Write("IsArray") & "<br />"
Response.Write(typename(foo.MyArray)) & "<br />"
Response.Write(UBound(foo.MyArray)) & "<br />"
Это приводит к;
IsArray
String()
1
Однако, когда я пытаюсь получить доступ к содержимому массива с помощью;
Response.Write(foo.MyArray(0)) & "<br />"
Я получаю;
Microsoft VBScript runtime (0x800A01C2) Неверное количество аргументов или
неверное присвоение свойства: 'MyArray'
Любая помощь очень ценится.
Редактировать Это предоставить дополнительную информацию после переваривания полученных ответов (спасибо)
При изменении реализации свойства MyArray на;
public object[] MyArray {
get { return (object[])_myArray; }
}
Я тогда получаю следующую ошибку,
Microsoft VBScript runtime (0x800A000D) Несоответствие типов: 'MyArray'
Итак, я попытался индивидуально привести каждую строку к объекту;
public object[] MyArray {
get {
object[] tmp = new object[_myArray.Count()];
for (int x = 0; x < _myArray.Count(); x++) {
tmp[x] = (object)_myArray[x];
}
return tmp;
}
}
Потом я вернулся,
Microsoft VBScript runtime (0x800A01C2) Неверное количество аргументов или
недопустимое присвоение свойства: 'MyArray'
Редактировать Окончательное решение с помощью Как правильно упорядочить массивы VB-Script в и из COM-компонента, написанного на C #
C #
public object MyArray {
get { return _myArray.Cast<object>().ToArray(); }
}
VBScript
Dim foo
Set foo = Server.CreateObject("Foo.Bar.MyClass")
bar = foo.MyArray
Response.Write bar(0)
Ключ должен был предоставить object
, а не object[]
, и, как предложил AnthonyWJones, перед использованием назначьте массив переменной.
Еще раз спасибо.