Я могу использовать Список <T> в качестве набора указателей метода? (C#)

Я также изучаю Amazon Managed Blockchain, хотя его в предварительном просмотре. Надеюсь, я смогу помочь вам в вашем вопросе. mspid не является параметром для отправки в запросе. Похоже, что вы что-то упустили в файле конфигурации. Можете ли вы выслать мне содержимое файла конфигурации ниже?

cat ~/non-profit-blockchain/tmp/connection-profile/ngo-connection-profile.yaml

При просмотре содержимого файла конфигурации очевидно, что значение mspid отсутствует в файле конфигурации. ID поставщиков услуг членства (MSP) - это обязательное значение, которое должно быть установлено в конфигурации. Вы также можете подтвердить это с помощью команды ниже.

cat ~/non-profit-blockchain/tmp/connection-profile/ngo-connection-profile.yaml | grep mspid:
Если он показывает пустое значение, вам нужно установить mspid в файле конфигурации. Убедитесь, что переменные среды, упомянутые в
~/non-profit-blockchain/ngo-fabric/fabric-exports.sh
, установлены правильно. Если этот файл отсутствует, используйте
~/non-profit-blockchain/ngo-fabric/templates/exports-template.sh
. Вам необходимо установить значение переменной среды $ {MEMBERID} в mspid в ngo-connection-profile.yaml, также посмотрите, отсутствует ли какое-либо другое обязательное значение поля в файле конфигурации. Вы также можете увидеть детали значений, которые необходимо заменить в файле конфигурации, из сценария ниже.
~/non-profit-blockchain/ngo-rest-api/connection-profile/gen-connection-profile.sh
. Позвольте мне перечислить их.

sed -i "s|%PEERNODEID%|$PEERNODEID|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%MEMBERID%|$MEMBERID|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%CAFILE%|$LOCALCA|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%ORDERINGSERVICEENDPOINT%|$ORDERINGSERVICEENDPOINT|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%ORDERINGSERVICEENDPOINTNOPORT%|$ORDERINGSERVICEENDPOINTNOPORT|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%PEERSERVICEENDPOINT%|$PEERSERVICEENDPOINT|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%PEERSERVICEENDPOINTNOPORT%|$PEERSERVICEENDPOINTNOPORT|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%PEEREVENTENDPOINT%|$PEEREVENTENDPOINT|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%CASERVICEENDPOINT%|$CASERVICEENDPOINT|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%ADMINUSER%|$ADMINUSER|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml
sed -i "s|%ADMINPWD%|$ADMINPWD|g" $REPODIR/tmp/connection-profile/ngo-connection-profile.yaml

После установки значений и проверки остановите узел или завершите процесс, запущенный на порте 3000, и снова запустите узел. cd ~ / non-profit-blockchain / ngo-rest-api

nvm use lts/carbon
node app.js &

6
задан Bret Walker 25 September 2008 в 19:27
поделиться

7 ответов

Необходимо бросить object в списке к a BinaryOp, или, лучше, используйте параметр более определенного типа для списка:

delegate int BinaryOp(int x, int y);

List<BinaryOp> methodsToExecute = new List<BinaryOp>();

methodsToExecute.add(Add);
methodsToExecute.add(Subtract);

foreach(BinaryOp method in methodsToExecute)
{
    method(1,2);
}
15
ответ дан 8 December 2019 в 05:59
поделиться

Используя.NET 3.0 (или 3.5?) у Вас есть универсальные делегаты.

Попробуйте это:

List<Func<int, int, int>> methodsToExecute = new List<Func<int, int, int>>();

methodsToExecute.Add(Subtract);

methodsToExecute.Add[0](1,2); // equivalent to Subtract(1,2)
3
ответ дан 8 December 2019 в 05:59
поделиться
List<Func<int, int, int>> n = new List<Func<int, int, int>>();
            n.Add((x, y) => x + y);
            n.Add((x, y) => x - y);
            n.ForEach(f => f.Invoke(1, 2));
2
ответ дан 8 December 2019 в 05:59
поделиться

Не попробовали его, но использование Списка <Действие <t>>, тип должен смочь сделать это.

0
ответ дан 8 December 2019 в 05:59
поделиться

Мне нравится реализация Khoth лучше, но я думаю, что вызывает Вашу ошибку компилятора, то, что Вы не бросаете метод в BinaryOp, прежде чем Вы попытаетесь вызвать его. В Вашем цикле foreach это - просто "объект". Измените свой foreach для сходства с Khoth, и я думаю, что он работал бы.

1
ответ дан 8 December 2019 в 05:59
поделиться

Каждый раз, когда я испытал желание сделать что-то вроде этого, я нашел, что обычно лучше осуществить рефакторинг Ваш дизайн для использования шаблона "команда", тем более, что все методы имеют те же параметры. Этот путь допускает намного больше гибкости.

1
ответ дан 8 December 2019 в 05:59
поделиться

Имейте их всех реализация единого интерфейса, скажите IExecuteable и затем имейте Список <IExecutable>

Кроме того, использование делегатов:

class Example
{
    public delegate int AddDelegate(int x, int y);

    public List<AddDelegate> methods = new List<AddDelegate>();

    int Execute()
    {
        int sum = 0;
        foreach(AddDelegate method in methods)
        {
            sum+=method.Invoke(1, 2);
        }
        return sum;
    }
}
0
ответ дан 8 December 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: