C# подсчитать и перечислить пары dict другого метода - PullRequest
0 голосов
/ 05 января 2020

У меня есть приведенный ниже код, и мне нужно выяснить, сколько и все пары словаря, который, однако, принадлежит методу другого пространства имен:

using sys = System;
using gen = System.Collections.Generic;

namespace xtra
{
    class TestClass
    {
        public void Sing()
        {
            gen::Dictionary<string, int> dict = new gen::Dictionary<string, int>()
            {
                ["A"] = 1,
                ["B"] = 2,
                ["C"] = 3

            };
        }
    }
}



namespace ConsoleApp99
{
    class Program
    {
        static void Main(string[] args)
        {
            xtra.TestClass Joe = new xtra.TestClass();
            Joe.Sing();
            foreach (string name in Joe.Keys)  //error!
                sys.Console.WriteLine($"{name} {dict[name]}"); //error!
        }
    }
}

Итак, метод Sing создает и заполняет словарь, но после создания экземпляра в другом пространстве имен (в Main) я могу его создать, но как мне считать пары и печатать их значения? Я понимаю, что Джо - это метод создания словаря, но я понятия не имею, как ссылаться на словарь Джо ..

Ответы [ 2 ]

0 голосов
/ 05 января 2020

Модификатор доступа к свойству dict должен быть public для доступа к нему из другого класса. Другой подход заключается в раскрытии только свойства dict путем его инкапсуляции и создания метода Sing() private.

class TestClass
{
    private Dictionary<string, int> _dict;
    public Dictionary<string, int> dict
    {
        get
        {
            if (_dict == null)
            {
                Sing();
            }
            return _dict;
        }
        set { _dict = value; }
    }

    private void Sing()
    {
        _dict = new Dictionary<string, int>()
        {
            ["A"] = 1,
            ["B"] = 2,
            ["C"] = 3
        };
    }
}

class Program
{
    static void Main(string[] args)
    {
        xtra.TestClass Joe = new xtra.TestClass();
        foreach (string name in Joe.dict.Keys)
            sys.Console.WriteLine($"{name} {Joe.dict[name]}");
        Console.ReadLine();
    }
}
.
0 голосов
/ 05 января 2020

Вам необходимо определить этот словарь как свойство publi c внутри TestClass, чтобы иметь доступ к нему из другого класса / пространства имен:

namespace xtra
{
    class TestClass
    {
        public Dictionary<string, int> Dict { get; set; }

        public void Sing()
        {
            Dict = new Dictionary<string, int>()
            {
                ["A"] = 1,
                ["B"] = 2,
                ["C"] = 3

            };
        }
    }
}

namespace ConsoleApp99
{
    class Program
    {
        static void Main(string[] args)
        {
            xtra.TestClass Joe = new xtra.TestClass();
            Joe.Sing();
            foreach (string name in Joe.Dict.Keys)  //error!
                sys.Console.WriteLine($"{name} {Joe.Dict[name]}"); //error!
        }
    }
}
...