Обращение к структуре через индексатор и изменение её поля - C#

Узнай цену своей работы

Формулировка задачи:

Возможно ли в C#?
class SomeClass
{
    // Хочу вот так
    void Test()
    {
        this["Desu"].Version = 10;
    }
 
    struct Client
    {
        public Client(string Name, string Folder, int Version, int LastVersion = 0)
        {
            this.Name = Name;
            this.Folder = Folder;
            this.Version = Version;
            this.LastVersion = LastVersion;
        }
 
        public string Name;
        public string Folder;
        public int Version;
        public int LastVersion;
    }
 
    public Client this[string Name]
    {
        get
        {
            foreach (Client cl in Clients)
                if (cl.Name == Name)
                    return cl;
        }
        set
        {
                // ?
        }
    }
 
    Client[] Clients;
}

Решение задачи: «Обращение к структуре через индексатор и изменение её поля»

textual
Листинг программы
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var clients = new Client[] 
            { 
                new Client("Вася", "", 0, -1),
                new Client("Петя", "", 1, -1),
                new Client("Сидор", "", 2, -1),
                new Client("Иван", "", 0, 0),
                new Client("Петя2", "", 5, 2),
            };
 
            ClientManager manager = new ClientManager();
 
            foreach (var item in clients)
                manager[item.Name] = item;
 
            manager["Вася"].Version = 34;
 
            Console.WriteLine(manager["Вася"].Version);
            Console.ReadKey(true);
        }
    }
 
    public class Client
    {
        public Client(string Name, string Folder, int Version, int LastVersion = 0)
        {
            this.Name = Name;
            this.Folder = Folder;
            this.Version = Version;
            this.LastVersion = LastVersion;
        }
 
        public string Name;
        public string Folder;
        public int Version;
        public int LastVersion;
    }
 
    public class ClientManager
    {
        Dictionary<string, Client> list = new Dictionary<string, Client>();
 
        public Client this[string Name]
        {
            get
            {
                Client result;
                if (list.TryGetValue(Name, out result))
                    return result;
                else
                    throw new ArgumentOutOfRangeException("Элемента с указанным ключом не существует.");
 
            }
            set
            {
                if (list.ContainsKey(Name)) list.Remove(Name);
                list.Add(Name, value);
            }
        }
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.444 из 5
Похожие ответы