Объявление и использование глобальных массивов c # - PullRequest
7 голосов
/ 05 января 2012

Я не смог найти информацию, относящуюся к этому вопросу. Я пытаюсь создать глобальный массив в C #, чтобы я мог вводить в него информацию в разных точках моего кода, а затем вызывать информацию обратно для ее отображения. Например, я хочу взять следующую информацию и поместить ее в массив:

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

Затем я хочу иметь возможность вызывать этот массив с циклом for или чем-то подобным, чтобы я мог отобразить эту информацию позже. Одна маленькая вещь, которую я забыл упомянуть, это то, что мне, вероятно, понадобится либо массив массивов, либо многомерный массив. Причина этого в том, что у меня будет много разных аукционов и данные о каждом аукционе (отсюда и переменные выше), и я хочу отобразить эту информацию в самом конце программы. Спасибо за ваше время!

Обновление 1

Итак, я думаю, что я не проясняю себя, потому что я запутался, но это также может быть потому, что я немного разочарован этой программой. Я хочу иметь возможность создать глобальный массив, а затем получить и установить информацию, хранящуюся в этом массиве, с различными функциями в моей программе, так как разные функции будут изменять разные части этого массива. Кроме того, я не возражаю против использования кэширования, если я понимаю, как это работает, или даже имею ссылку, чтобы прочитать об этом. И последнее, что я хочу добавить: я делаю это на Windows Phone 7, поэтому я ограничен тем, какие библиотеки и системные вызовы я могу использовать.

Обновление 2

Я немного устала от ООП, поэтому я собираюсь прочитать больше об этом (благодаря тому, что разбираюсь с HTML и не имею возможности заниматься настоящим программированием). Спасибо за все предложения. Я, вероятно, вернусь к этой теме, если не смогу что-то выяснить. Ура!

Ответы [ 8 ]

11 голосов
/ 05 января 2012

Я не предлагаю вам использовать глобальные массивы, это не лучшая практика, вам понадобится хранилище данных и берите оттуда данные, которые вы хотите использовать, относительно структуры, которую вы хотите использовать, я предлагаю вам сделатьчто-то вроде этого:

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
}
8 голосов
/ 05 января 2012

Глобальные переменные почти всегда плохая идея, поэтому C # затрудняет их создание. Однако, если вы действительно хотите, вы можете сделать что-то вроде этого:

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

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

Заметьте, однако, что, пока вы вынуждены создавать статический класс, чтобы сделать это, почему бы не сделать действительную переменную массива приватной, а не публичной, а затем добавить статические, публичные методы получения и установки? Такой подход, по крайней мере, устраняет некоторую опасность, присущую глобальным переменным.

4 голосов
/ 05 января 2012

В C # нет глобальных переменных. Есть только ученики. Лучший способ передать данные из одной части вашего приложения в другую - это передать ссылку на объект (экземпляр класса), который содержит все соответствующие данные в своих членах.

Вы также можете использовать статические классы, которые ведут себя подобно глобальным переменным, но когда вы лучше познакомитесь с объектно-ориентированным программированием, вы поймете, что это не очень хороший способ обработки данных.

2 голосов
/ 05 января 2012

Я бы использовал Generic как List, так как вам не нужно беспокоиться о размере, и вы можете получить итератор для него в цикле foreach.

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

для вставки элемента:

values.Add("item");

для удаления:

values.Remove("item");

Если вы хотите многомерный, используйте:

List<List<string>> multi_dimens_values;
2 голосов
/ 05 января 2012

Ну, кроме того факта, что у вас, вероятно, есть структурная проблема, если вы храните вещи глобально.

Вы можете использовать статическое свойство для этого.

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

Затем получите доступэто так:

MyVariables.MyStuff[0]
1 голос
/ 05 января 2012

это очень плохая идея.

  1. избегайте глобальных переменных в максимально возможной степени. Есть несколько случаев, когда вам нужен публичный, изменчивый синглтон.
  2. использовать явный объект (POCO) вместо многомерного массива. см. ниже пример
  3. вместо этого создайте / сохраните / загрузите объекты из хранилища по мере необходимости.

    класс Аукцион { public long Id {get; задавать;} публичная строка ItemName {get; задавать;} ... }

1 голос
/ 05 января 2012

Я думаю, Dictionary<string, string> будет более подходящим ... Вы можете просмотреть его и получить доступ к определенному элементу.А также передайте это вашим методам.

1 голос
/ 05 января 2012
string[] values;

Или объявить одну из определенной длины:

string[] values = new string[6]; // creates an array with a length of 6.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...