Как мне ссылаться на объект класса с помощью String в C #? - PullRequest
1 голос
/ 19 января 2011

Мне нужно перебрать значения массива и объекты ссылочного класса .. вот так .. как мне это сделать в C # .net ??

в C # как вы ссылаетесь на объект класса со строкой ??

есть ...

 public class GlobalVars
 {

     private static Object[] _prevval1;

     public static Object[] prevval1
     {
         get { return _prevval1; }

         set { _prevval1 = value; }
     }
 }



 string[] str = new string[]'
 str[0] = "val1";

 string value = Convert.toString(GlobalVars.prev + str[0] + [0].toString());

Это (последняя строка выше) не работает .. как так, как мне это сделать ??

Я только что использовал заявление CASE, комментарии или предложения приветствуются ... спасибо за вашу помощь и советы.

        string[] curArray = new string[6];
        curArray[0] = "AUD/USD";
        curArray[1] = "EUR/USD";
        curArray[2] = "GBP/USD";
        curArray[3] = "USD/CAD";
        curArray[4] = "USD/CHF";
        curArray[5] = "USD/JPY";

        for (int i = 0; i < curArray.Length; i++ )
        {
            // Get Symbols
            DataRow dtrow = dt.NewRow();
            dtrow["Symbol"] = curArray[i].ToString();
            string sym = curArray[i].ToString();

            // Get Ask Price
            string ask = "-";
            dtrow["AskPrice"] = ask.ToString();

            if (GlobalVars.prevEURUSD != null)
            {
                switch (sym)
                {
                    case "AUD/USD":
                        dtrow["AskPrice"] = GlobalVars.prevAUDUSD[3].ToString();
                        break;
                    case "EUR/USD":
                        dtrow["AskPrice"] = GlobalVars.prevEURUSD[3].ToString();
                        break;
                    case "GBP/USD":
                        dtrow["AskPrice"] = GlobalVars.prevGBPUSD[3].ToString();
                        break;
                    case "USD/CAD":
                        dtrow["AskPrice"] = GlobalVars.prevUSDCAD[3].ToString();
                        break;
                    case "USD/CHF":
                        dtrow["AskPrice"] = GlobalVars.prevUSDCHF[3].ToString();
                        break;
                    case "USD/JPY":
                        dtrow["AskPrice"] = GlobalVars.prevUSDJPY[3].ToString();
                        break;
                }
            }

Ответы [ 4 ]

1 голос
/ 19 января 2011

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

Существует несколько различных классов .NET, которые помогут вам. Вероятно, наиболее распространенными являются System.Collections.Specialized.NameValueCollection и System.Collections.Generic.Dictionary. Если все предметы в вашей коллекции одного типа, я бы порекомендовал Dictionary. Если они могут быть разных типов, вы можете присмотреться к NameValueCollection.

0 голосов
/ 19 января 2011

Вам понадобится использовать отражение на этих GlobalVars, чтобы получить PropertyInfo (например, http://msdn.microsoft.com/en-us/library/1zkfcy34(v=VS.95).aspx) и GetMethod, чтобы получить значение. Не очень сложно. Я уверен, что в сети есть примеры. Посмотреть Reflection , PropertyInfo, GetGetMethod ..

0 голосов
/ 19 января 2011

Почему бы не использовать Dictionary<string, object>?Вы можете получить доступ к свойству Keys для перебора ключей.

РЕДАКТИРОВАТЬ На основании вашего комментария:

class ProductPriceInfo 
{
    public string ID {get;set;}
    public DateTime PriceTimeStamp {get;set;}
    public decimal Price {get;set;}
}
...
Dictionary<string, ProductPriceInfo> _prices = new Dictionary<string, ProductPriceInfo>();
// Adding a price
_prices.Add(myProduct.ID, myProduct);

// updating the price
if(_prices[myProductv2.ID].PriceTimeStamp < myProductv2.PriceTimeStamp)
{
    _prices[myProductv2.ID].PriceTimeStamp = myProductv2.PriceTimeStamp;
    _prices[myProductv2.ID].Price = myProductv2.Price;
}

Будет ли это работать?

0 голосов
/ 19 января 2011

Ну, вы можете сделать следующее:

string value = Convert.toString(GlobalVars.prev.ToString() + str[0]);

но я не это то, что вы ищете, потому что это (как правило) просто даст вам имя типа. Если у вас есть контроль над классами, которые будут в этом массиве, вы можете переопределить ToString в объекте и представить все, что вы хотите:

override string ToString()
{
         return "MyObject|FirstName:" + this.FirstName + "|LastName:" + this.LastName; // etc.
}

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

Это то, что вы ищете?

...