2012-01-04 25 views
5

No he podido encontrar ninguna información relacionada con esta pregunta. Intento crear una matriz global en C# para poder ingresar información en diferentes puntos de mi código y luego llamar la información en otro momento para mostrarla. Por ejemplo, quiero tomar la siguiente información y ponerla en la matriz:Declaración y uso de matrices globales C#

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

entonces yo quiero ser capaz de llamar a esa matriz con un bucle, o algo similar, de modo que pueda mostrar esa información en otro momento. Ahora, una pequeña cosa que olvidé mencionar es que probablemente necesite una matriz de matrices o una matriz multidimensional. La razón de esto es porque voy a tener muchas subastas diferentes y los datos sobre cada subasta (de ahí las variables anteriores) y quiero mostrar esa información al final del programa. ¡Gracias por tu tiempo!

Actualización 1

Por lo tanto, creo que no estoy siendo claro, porque me estoy confundido, pero que también podría ser porque estoy un poco frustrado por el momento con este programa. Quiero ser capaz de crear una matriz global y luego obtener & establecer la información almacenada en esa matriz con diferentes funciones dentro de mi programa, ya que las diferentes funciones modificarán diferentes partes de esa matriz. Además, no me importaría usar el almacenamiento en caché, si entendía cómo funcionaba eso o si tenía un enlace para leer sobre él. Una última cosa para agregar, estoy haciendo esto en el Windows Phone 7, por lo que estoy limitado en qué bibliotecas y llamadas al sistema puedo usar.

Actualización 2

estoy un poco oxidado en programación orientada a objetos, así que voy a ir a leer más sobre ella (gracias a tratar una tonelada con HTML y en realidad no tienen la oportunidad de hacerlo de programación real) Gracias por las sugerencias de todos. Probablemente publicaré sobre este tema si no puedo entender algo más. ¡Aclamaciones!

+1

No, no hagas eso. No usamos matrices globales en estos días. – Richard

+0

Usar el almacenamiento en caché sería una mejor idea que las matrices globales, ya que es probable que se encuentre con problemas de simultaneidad y multiproceso. – Kane

+0

"No sé cómo llamar a la misma matriz cada vez que hago llamadas separadas a la matriz porque, por lo que entiendo, C# trata las matrices como objetos". Eso no tiene ningún sentido. ¿Por qué crees que las matrices siendo objetos significa que no obtendrás "la misma matriz cada vez"? –

Respuesta

7

Las variables globales son casi siempre una mala idea, por lo que C# hace que la creación de ellos una cosa difícil de hacer. Sin embargo, si realmente desea, se puede hacer algo como esto:

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

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

Tenga en cuenta, sin embargo, que el tiempo que su se ven obligados a crear una clase estática para hacer esto, ¿por qué no seguir adelante y hacer que el real ¿variable de matriz privada, en lugar de pública, y luego agregue métodos estáticos, de obtención pública y de establecimiento? Ese enfoque al menos elimina parte del peligro inherente a las variables globales.

1
string[] values; 

o declarar una de una longitud particular:

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

Oh, entiendo eso. El problema es que no sé qué hacer con respecto a dónde ubicarlo para que diferentes métodos puedan llamar a ese conjunto y usar la información que contiene. – th3n3wguy

+0

Técnicamente correcto, pero en realidad no responde la pregunta en mi humilde opinión. –

+0

@thenewguy Por favor, lea más sobre programación orientada a objetos y patrones de diseño. Todavía estás pensando en formas no OOP. –

2

Bueno, aparte del hecho de que es probable que tenga un problema estructural, si usted está almacenando cosas a nivel mundial.

Puede usar una propiedad estática para esto.

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

luego acceder a ella de esta manera:

MyVariables.MyStuff[0] 
+0

También puede declarar la clase en sí misma como estática ('public static class MyVariables'), aunque esto no es muy importante, ya que evitará que los usuarios instanciando un objeto sin sentido. – MusiGenesis

4

En C# no hay variables globales. Solo hay miembros de la clase. La mejor manera de pasar datos de una parte de la aplicación a otra es pasar una referencia a un objeto (una instancia de una clase) que contiene todos los datos relevantes en sus miembros.

También puede usar clases estáticas, que se comportan como variables globales similares, pero cuando se familiarice con la programación orientada a objetos se dará cuenta de que esta no es una buena manera de manejar datos.

2

Utilizaría un genérico como una lista ya que no tiene que preocuparse por el tamaño y puede obtener un iterador en un bucle foreach.

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

Para insertar un elemento:

values.Add("item"); 

para eliminar:

values.Remove("item"); 

Si desea multidimensional a continuación, utilizar:

List<List<string>> multi_dimens_values; 
1

Creo Dictionary<string, string> habrá mas apropiado... Puede recorrerlo y acceder a un elemento específico. Y también pásalo a tus métodos.

1

esta es una muy mala idea.

  1. evite las variables globales tanto como sea posible. hay pocas instancias en las que necesita un singleton público y mutable.
  2. usan un objeto explícito (POCO) en lugar de una matriz multidimensional. vea a continuación para un ejemplo
  3. en su lugar cree/guarde/cargue los objetos del almacenamiento según sea necesario.

    clase Subasta { public long Id {get; establecer;} cadena pública ItemName {get; set;}} ...

9

no te sugiero utilizar matrices globales, no es una buena práctica lo que se necesita es un repositorio de datos y toma de allí los datos que desea utilizar , en relación con la estructura que desea utilizar sugiero que hagas algo como esto:

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;} 
} 

y luego usar una Lista de ese objeto en particular para acceder a sus datos.

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

Luego puede agregar o quitar elementos según lo desee.

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

O navegar por la lista con un bucle foreach

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