Как вызвать индексатор для класса C # из PowerShell? - PullRequest
7 голосов
/ 11 ноября 2010

У меня проблемы с выяснением того, как заставить Powershell вызывать индексатор в моем классе. Класс выглядит примерно так (очень упрощенно):

public interface IIntCounters
{
    int this[string counterName] { get; set; }
}

public class MyClass : IIntCounters
{
    public IIntCounters Counters { get { return this; } }

    int IIntCounters.this[string counterName]
        { get { ...return something... } }
}

Если я создаю новый класс, я не могу просто использовать оператор скобок - я получаю ошибку «неспособен индексировать». Я также попытался использовать get_item (), и это то, что Reflector показывает мне, что индексатор в конечном итоге становится в сборке, но это выдает ошибку «не содержит метод с именем get_item».

ОБНОВЛЕНИЕ: это похоже на мое использование явных интерфейсов. Итак, мой новый вопрос: есть ли способ заставить Powershell увидеть индексатор, не переключаясь с явных интерфейсов? (Я действительно не хочу изменять эту сборку, если это возможно.)

Ответы [ 2 ]

4 голосов
/ 22 ноября 2010

Это работает для меня (использует отражение):

$obj = new-object MyClass
$p = [IIntCounters].GetProperty("Item")
$p.GetValue($obj, @("counterName"))
2 голосов
/ 11 ноября 2010

Я не пробовал это, но похоже, что это должно работать:

$obj = new-object MyClass
$counters = [IIntCounters]$obj
$counters['countername']

(Хорошо, я немного поигрался и больше не думаю, что это сработает, но все же стоит попробовать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...