2012-01-04 159 views
5

我找不到与此问题有关的任何信息。我试图在C#中创建一个全局数组,以便我可以在代码中的不同位置向它输入信息,然后稍后再调用该信息以显示它。例如,我要采取以下信息,并把它放入数组:声明和使用全局数组c#

string auctionID; 
string itemName; 
string itemID; 
string bid; 
string buyout; 
string quantity; 

那么我希望能够调用数组与for循环,或类似的东西,这样我就可以显示该信息晚些时候。现在,我忘记提到的一件事是,我可能需要一个数组数组或一个多维数组。原因是因为我将有许多不同的拍卖和每次拍卖的数据(因此上面的变量),我想在程序的最后显示这些信息。感谢您的时间!

更新1

所以,我想我不会让自己清楚,因为我越来越糊涂,但也可能是因为我在这个节目的那一刻有点沮丧。我希望能够创建一个全局数组,然后用我的程序中的不同函数设置存储在该数组中的信息,因为不同的函数将修改该数组的不同部分。另外,如果我理解了如何工作或者甚至有链接来阅读它,我不会介意使用缓存。最后要补充的是,我在Windows Phone 7上执行此操作,因此我限制了可以使用的库和系统调用。

更新2

我对OOP颇有几分生疏,所以我会去更多阅读起来就可以了(由于处理一吨的HTML,而不是真的有机会做真正的编程)。感谢大家的建议。如果我无法弄清楚什么,我可能会回复这个话题。干杯!

+1

不,不这样做。我们现在不使用全局数组。 – Richard 2012-01-04 21:39:13

+0

使用缓存会比全局数组更好,因为您可能会遇到并发性和多线程问题。 – Kane 2012-01-04 21:40:00

+0

“每当我对数组进行单独调用时,我都不知道如何调用同一个数组,因为据我所知,C#将数组视为对象。”这没有任何意义。你为什么认为数组是对象意味着你不会每次都得到“相同的数组”? – 2012-01-04 21:40:56

回答

7

全局变量几乎总是一个坏主意导航,所以C#使创建他们很难的事情。但是,如果你真的想,你可以做这样的事情:

public static class GlobalData 
{ 
    public static string[] Foo = new string[16]; 
}; 

// From anywhere in your code... 
Console.WriteLine(GlobalData.Foo[7]); 

但是请注意,只要你不得不创建一个静态类来做到这一点,为什么不继续前进,使实际数组变量私有,而不是公共,然后添加静态,公共getter和setter方法?这种方法至少消除了全球变量固有的一些危险。

1
string[] values; 

或宣布某一特定长度的一个:

string[] values = new string[6]; // creates an array with a length of 6. 
+0

哦,我明白了。问题是,我不知道该怎么做,以便不同的方法可以调用该数组并使用它内部的信息。 – th3n3wguy 2012-01-04 21:39:52

+0

技术上正确,但实际上并没有回答IMHO的问题。 – 2012-01-04 21:43:20

+0

@thenewguy请阅读更多关于面向对象的编程和设计模式。你仍然在考虑采用非OOP方式。 – 2012-01-04 21:49:07

2

好了,除了事实上,你可能有一个结构性的问题,如果你存储在全球的东西。

您可以对此使用静态属性。

public class MyVariables 
{ 
    private static string[] _MyStuff 
    public static string[] MyStuff 
    { 
      return _MyStuff; 
    } 
} 

然后访问它是这样的:

MyVariables.MyStuff[0] 
+0

你也可以声明这个类本身是静态的('public static class MyVariables'),尽管这不是很重要 - 它只会阻止用户毫无意义地实例化一个对象。 – MusiGenesis 2012-01-04 21:42:39

4

在C#中没有全局变量。只有班级成员。将数据从应用程序的一部分传递到另一部分的最佳方式是将对某个对象(类的一个实例)的引用传递给其成员中的所有相关数据。

你也可以使用静态类,它们的行为类似于全局变量,但是当你更熟悉面向对象编程时,你会意识到这不是一个处理数据的好方法。

2

我会使用像List一样的泛型,因为您不必担心大小,并且您可以在foreach循环中为它获取迭代器。

List<string> values = new List<string>(); 

插入一个项目:

values.Add("item"); 

删除:

values.Remove("item"); 

如果你想多维再使用:

List<List<string>> multi_dimens_values; 
1

我认为Dictionary<string, string>会更加合适...您可以遍历它并访问特定的项目。并传递给你的方法。

1

这是一个非常糟糕的主意。

  1. 尽可能避免全局变量。有几个例子你需要一个公开的,可变的单身人士。
  2. 使用显式对象(PO​​CO)而不是多维数组。请参阅下面的示例
  3. 改为根据需要从存储创建/保存/加载对象。

    class拍卖 { public long Id {get;设置;} public string ItemName {get;设置;} ... }

9

我不建议你使用全局阵列,是不是你需要什么是最好的做法是一种数据存储库,并从那里取数据要使用,关于你要使用的结构,我建议你做这样的事情:

public class Auction 
{ 
      public string auctionID {get; set;} 
      public string itemName {get; set;} 
      public string itemID {get; set;} 
      public string bid {get; set;} 
      public string buyout {get; set;} 
      public int quantity {get; set;} 
} 

,然后使用该特定对象的列表来访问您的数据。

List<Auction> acutions = new List<Auction>(); 

然后您可以根据需要添加或删除项目。

auctions.Add(auction object); 
auctions.remove(auction object); 

或者通过列表与foreach循环

foreach (Auction item in auctions) 
{ 
// your code to handle items here 
}