es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C#: accediendo a un diccionario usando una clase parcial

Estoy intentando acceder a un Diccionario de la siguiente manera, utilizando una clase parcial. El objetivo final es exponer este diccionario y permitir que diferentes métodos lo lean/escriban directamente.

El archivo ‘FilenameABC.cs’ tiene este código, que hasta ahora parece estar bien para mí:

namespace Namespace1
{
partial class ClassA
{
public class ExampleDictionary
{
private Dictionary<int, string=””> _dict;

        public ExampleDictionary()
        {
            _dict = new Dictionary<int, string="">();
        }
    }
}

}

El archivo ‘FilenameDEF.cs’ tiene este código y aquí es donde tengo dificultades. No estoy seguro de por qué los métodos .Add no funcionan. En el primero estoy intentando usarlo justo después de crear una instancia de la clase ExampleDictionary, lo cual parece ser bastante intuitivo (dado mi nivel de conocimiento actual, por supuesto). En el segundo, estoy intentando agregar elementos desde dentro de un método, que es…

namespace Namespace1
{
partial class ClassA
{
ExampleDictionary instanceOfDict = new ExampleDictionary();
instanceOfDict.Add(1, “Test1”); // Esto no funciona

    public static void FunctionA()
    {            
        for (int i = 0; i < 10; i++)
        {
        string text = $"Test{i}";
        instanceOfDict.Add(i, text); // Esto tampoco funciona               
        }          
    }
}

}

¿Podría alguien ayudarme, por favor?</int,></int,>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece haber algunos problemas con el código en FilenameDEF.cs. En primer lugar, no se pueden tener declaraciones fuera de un método o constructor en una clase, por lo que no se puede crear una instancia de ExampleDictionary y llamar de inmediato a un método. En su lugar, necesitas crear la instancia dentro de un método o constructor.

    En segundo lugar, la variable instanceOfDict debe ser declarada dentro de la clase ClassA, fuera de cualquier método, para que esté accesible a todos los métodos en esa clase.

    Aquí tienes una versión actualizada del código en FilenameDEF.cs:

    namespace Namespace1
    {
        partial class ClassA
        {
            ExampleDictionary instanceOfDict;
    
            public ClassA()
            {
                instanceOfDict = new ExampleDictionary();
                instanceOfDict._dict.Add(1, "Test1"); // Puedes acceder directamente al campo privado _dict desde dentro de la clase ExampleDictionary
            }
    
            public static void FunctionA()
            {            
                ExampleDictionary dict = new ExampleDictionary();
                for (int i = 0; i < 10; i++)
                {
                    string text = $"Test{i}";
                    dict._dict.Add(i, text);                
                }          
            }
        }
    }
    

    En el constructor de ClassA, creas una nueva instancia de ExampleDictionary y añades un elemento a su campo privado _dict. El campo _dict es privado, por lo que necesitas acceder a él directamente desde dentro de la clase ExampleDictionary.

    En el método FunctionA, creas una nueva instancia de ExampleDictionary y añades elementos a su campo privado _dict. Dado que este método es estático, no puedes acceder a la variable instanceOfDict declarada en la clase ClassA, por lo que creas una nueva instancia de ExampleDictionary en su lugar.

Comments are closed.