共享字典值

时间:2015-05-14 13:43:09

标签: c# dictionary

完全披露:我是C#的新手,而不是程序员程序员 - 我主要是SQL Server开发人员。这可能意味着我的问题要么天真也要简单。如果是这种情况,请道歉。

我已经使用多种方法创建了一个数据处理类。这些方法都使用同一组元数据的元素来驱动处理。元数据是从SQL Server元数据存储返回的单行数据中获取的。

最初,我将此数据行转换为变量,并明确地将这些数据传递给方法。哪个很快弄乱了。所以我接着转向基于Fields的方法,这使得事情变得更加整洁,但是如果元数据结构发生变化则需要管理。

为了使事情更具适应性,我接着实现了一个基于字典的方法,使用SQLDataReader和循环将列名和值转换为键/值对。我挣扎的那一点是引用这本词典。我可以避免像现在这样明确地将字典对象传递给每个方法,例如

public void Main()
{
    // create a dictionary and add values
    Dictionary<string, string> myDictionary = new Dictionary<string, string>()
    {
        {"cat", "miaow"},
        {"dog", "woof"},
        {"iguana", "grekkkk?"}
    };

    // get a value from the dictionary and display it
    MessageBox.Show(myDictionary["cat"]);

    // call another procedure
    up(myDictionary);

    // call another procedure that calls another procedure
    sh(myDictionary);
}

public void up(Dictionary<string, string> myDictionary) 
{
    // get a value from the dictionary and display it
    MessageBox.Show(myDictionary["dog"]);
}

public void sh(Dictionary<string, string> myDictionary)
{
    // call another procedure
    up(myDictionary);
}

或者我是否完全咆哮错误的树?

我已经看到过这篇文章:sharing dictionary contents between class instances,但是试图了解如何使用这个内容远远超出了我目前的知识水平。

编辑:根据Jon和Rodrigo的回答,我是如何做到的:

// create an empty dictionary 
    Dictionary<string, string> myDictionary = new Dictionary<string, string>()
        {
        };

    public void Main()
    {
        // build the dictionary
        BuildDictionary();

        // get a value from the dictionary and display it
        MessageBox.Show(myDictionary["cat"]);

        // call another procedure
        up();

        // call another procedure that calls another procedure
        sh();

    }

    public void BuildDictionary()
    {

        // note that in implementation this uses a dynamic process
        // rather than just explicitly setting values
        myDictionary.Add("cat", "miaow");
        myDictionary.Add("dog", "woof");
        myDictionary.Add("iguana", "grekkk?");
    }

    public void up() 
    {

        // get a value from the dictionary and display it
        MessageBox.Show(myDictionary["dog"]);

    }

    public void sh()
    {

        // call another procedure
        up();

    }

更整洁。感谢两者。

伊恩

1 个答案:

答案 0 :(得分:1)

在你非常特殊的情况下,你只是在自己的类中使用成员,你应该只将字典设置为你的类的私有成员(private是成员的默认行为,它是隐式的)。

Dictionary<string, string> myDictionary = new Dictionary<string, string>()
        {
            {"cat", "miaow"},
            {"dog", "woof"},
            {"iguana", "grekkkk?"}

        };
public void Main()
{

    // create a dictionary and add values


    // get a value from the dictionary and display it
    MessageBox.Show(myDictionary["cat"]);

    // call another procedure
    up();

    // call another procedure that calls another procedure
    sh();

}

public void up() 
{

    // get a value from the dictionary and display it
    MessageBox.Show(myDictionary["dog"]);

}

public void sh()
{

    // call another procedure
    up();

}

您还应该看一下修饰符。有关详情,请查看here