Может ли словарь содержать методы (Action<>), когда эти методы получают два параметра, которые являются List<>?

Я получаю эту ошибку несколько раз, когда пытаюсь выполнить код ниже: The dictionary is not compiling:"using the generic type Dictionary<> requires two parameters" "Invalid expression term 'string'" "; expected"...

Dictionary<string, Action<List<Data_Raw>,List<Data_Result>> rulesDictionary = new Dictionary<string, Action> { };
        rulesDictionary.Add("twentyFifty", CTARules.TwentyFiftyMA);
        rulesDictionary.Add("twentyHundred", CTARules.TwentyHundredMA);

public class Data_Raw
{

}

class Data_Result
{
}
c#
0
Allstar 23 Окт 2018 в 17:04

2 ответа

Лучший ответ

У вас есть синтаксические ошибки, такие как отсутствие закрывающих угловых скобок > и использование неправильных типов в конструкторе словаря.

Вот полный рабочий mcve, .net Fiddle

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        Dictionary<string, Action<List<Data_Raw>, List<Data_Result>>> rulesDictionary = new Dictionary<string, Action<List<Data_Raw>, List<Data_Result>>>();
        rulesDictionary.Add("twentyFifty", CTARules.TwentyFiftyMA);
    }
}

class Data_Raw
{
}

class Data_Result
{
}

class CTARules
{
    public static void TwentyFiftyMA(List<Data_Raw> myRawData, List<Data_Result> myResultData)
    {
    //do stuff
    }

    public static void TwentyHundredMA(List<Data_Raw> myRawData, List<Data_Result> myResultData)
    {
    //do stuff
    }
}
1
Igor 23 Окт 2018 в 14:11

Dictionary<string, Action<List<Data_Raw>,List<Data_Result>>> не может быть создан как Dictionary<string, Action> - вы должны создать экземпляр именно того типа, который вам нужен. Кроме того, это классический вариант использования ключевого слова var:

var rulesDictionary = new Dictionary<string, Action<List<Data_Raw>,List<Data_Result>>>();
1
Zohar Peled 23 Окт 2018 в 14:09
52951057