Словарь с лямбда-выражением - PullRequest
0 голосов
/ 27 ноября 2018

Извините за вопрос, но я просто не могу найти лямбда-выражение для следующего кода:

private void SelectIdCeoButton_Click(object sender, EventArgs e)
{
      int id = Convert.ToInt32(this.selectedIdCeo.Text);
      string name = "";

      if (id < 1 || id > 10)
      {
          throw new ArgumentException();
      }
      else
      {
          foreach (var line in ceoExtra.GiveCeoInfo())
          {
              CeoDiscription ceoDis = line.Value;

              if (id.Equals(ceoDis.id))
              {
                  name = ceoDis.ceoName.ToString();
              }
          }
          this.infoBox.Items.Add("chosen ceo: " + name);
      }
  }

Это для внутреннего foreach блока кода.

Я сделалмое исследование за попытку использовать лямбда-выражение, но оно все время выдает ошибку.Это работает нормально, но мне нужно найти лямбда-выражение для него.

Я составил список enum из CEO, и если я даю ID в моем интерфейсе, он должен вернуть CEO с этим ID.Вот другие классы, которые я использую для этого:

class CeoDiscriptionExtra : FactoryClass
{
    CeoDiscription ceo1 = new CeoDiscription(1, CEO.Bill_Gates, 60, 100000000);
    CeoDiscription ceo2 = new CeoDiscription(2, CEO.Dominic_Barton, 54, 6500000);
    CeoDiscription ceo3 = new CeoDiscription(3, CEO.Elon_Musk, 49, 2500000);
    CeoDiscription ceo4 = new CeoDiscription(4, CEO.Jim_Turley, 40, 6000000);
    CeoDiscription ceo5 = new CeoDiscription(5, CEO.Joe_Tucci, 35, 6000000);
    CeoDiscription ceo6 = new CeoDiscription(6, CEO.John_Schlifske, 47, 4500000);
    CeoDiscription ceo7 = new CeoDiscription(7, CEO.Mark_Zuckerberg, 33, 7000000);
    CeoDiscription ceo8 = new CeoDiscription(8, CEO.Paul_Jacobs, 45, 900000);
    CeoDiscription ceo9 = new CeoDiscription(9, CEO.Richard_Davis, 68, 1200000);
    CeoDiscription ceo10 = new CeoDiscription(10, CEO.Tom_Cook, 50, 5000000);

    Dictionary<int, CeoDiscription> dictionaryCeo = new Dictionary<int, CeoDiscription>();

    public void CeoInitialize()
    {
        dictionaryCeo.Add(ceo1.id, ceo1);
        dictionaryCeo.Add(ceo2.id, ceo2);
        dictionaryCeo.Add(ceo3.id, ceo3);
        dictionaryCeo.Add(ceo4.id, ceo4);
        dictionaryCeo.Add(ceo5.id, ceo5);
        dictionaryCeo.Add(ceo6.id, ceo6);
        dictionaryCeo.Add(ceo7.id, ceo7);
        dictionaryCeo.Add(ceo8.id, ceo8);
        dictionaryCeo.Add(ceo9.id, ceo9);
        dictionaryCeo.Add(ceo10.id, ceo10);
    }

    public Dictionary<int, CeoDiscription> GiveCeoInfo()
    {
        foreach (KeyValuePair<int, CeoDiscription> line in dictionaryCeo) //show everything in dictionaryCeo
        {
            CeoDiscription ceoDis = line.Value;
            Console.WriteLine("ID = {0}, Name = {1}, Age = {2}, Salary = {3}", ceoDis.id, ceoDis.ceoName, ceoDis.age, ceoDis.salary);               
        }

        return dictionaryCeo;
    }

    public override string GetCompanyName()
    {
        throw new NotImplementedException();
    }

    public override double GetCost()
    {
        throw new NotImplementedException();
    }

    public override double GetYield()
    {
        throw new NotImplementedException();
    }
}

[Serializable]
class CeoDiscription : FactoryClass
{
    public int id;
    public CEO ceoName;
    public int age;
    public double salary;       

    public CeoDiscription(CEO CeoN)
    {
        this.ceoName = CeoN;
    }

    public CeoDiscription(int id, CEO name, int age, double salary)
    {
        this.id = id;
        this.ceoName = name;
        this.age = age;
        this.salary = salary;
    }

    public CEO GetCeo()
    {
       return ceoName;
    }

    public void SetCeo(CEO CeonS)
    {
        this.ceoName = CeonS;
    }          

    public override string GetCompanyName()
    {
        throw new NotImplementedException();
    }

    public override double GetCost()
    {
        throw new NotImplementedException();
    }

    public override double GetYield()
    {
        throw new NotImplementedException();
    }        
}

[Serializable]
abstract class FactoryClass
{
    Boolean existing = false;
    public FactoryClass()
    {

    }

    public FactoryClass(Boolean existing)
    {
        this.existing = existing;
    }

    public double Cost { get; set; }
    public double Yield { get; set; }
    public string CompanyName { get; set; }

    public abstract double GetYield();
    public abstract double GetCost();
    public abstract string GetCompanyName();

    public enum CEO
    {
        Elon_Musk,
        Tom_Cook,
        Bill_Gates,
        Mark_Zuckerberg,
        Dominic_Barton,
        Jim_Turley,
        John_Schlifske,
        Joe_Tucci,
        Paul_Jacobs,
        Richard_Davis
    }

    public static MemoryStream SerializeToStream(object o)
    {
        MemoryStream stream = new MemoryStream();
        IFormatter formatter = new BinaryFormatter();
        formatter.Serialize(stream, o);
        return stream;
    }

    public static object DeserializeFromStream(MemoryStream stream)
    {
        IFormatter formatter = new BinaryFormatter();
        stream.Seek(0, SeekOrigin.Begin);
        object o = formatter.Deserialize(stream);
        return o;
    }
}

1 Ответ

0 голосов
/ 27 ноября 2018

Если вы ищете название элемента, идентифицированного по его идентификатору, и вы знаете, что идентификатор является уникальным, вы можете сделать это:

var name = ceoExtra.GiveCeoInfo().Values
    .FirstOrDefault(ceoDis => ceoDis.id == id)?.ceoName?.ToString() ?? "";

Обратите внимание, что это не является точным эквивалентомваш код, потому что он выбирает первое совпадение, а ваш код выбирает последнее.Если совпадение уникально, это не имеет значения.

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