2013-06-05 2 views
0

Что это лучший способ распечатать словарь, я создал класс валюты, то, как показано нижекак напечатать Dictionary <строка, MyClass>

class Currency{ 
    public string currency_code { get; set; } 
    public float unit { get; set; } 
    public string currency_name { get; set; } 
    public string currency_isim { get; set; } 
    public float forex_buying { get; set; } 
    public float forex_selling { get; set; } 
    public float banknote_buying { get; set; } 
    public float banknote_selling { get; set; } 
} 

Есть ли способ автоматически печатать объект?

Я хочу напечатать ее, как если возможно

Dictionary<string, Currency> dict = new Dictionary<string, Currency>(); 
..... 
..... 
add data to dict properly 
..... 
..... 
dict.print(); 

Хочу вернуть правильную строку, которая включает в себя все данные объекта. Как мне это сделать?

+1

'string str = новый JavaScriptSerializer(). Serialize (dict);'? – I4V

+0

@Bobson По умолчанию? это зависит от того, какой сериализатор вы используете. – I4V

+1

JavaScriptSerializer не включен в winform Я думаю, –

ответ

3

Как переопределить ToString() в валюте, которая возвращает то, что вам нужно от этого класса? Вам все равно придется сопоставить это со строковым ключом в словаре.

class Currency { 
    public string currency_code { get; set; } 
    public float unit { get; set; } 
    public string currency_name { get; set; } 
    public string currency_isim { get; set; } 
    public float forex_buying { get; set; } 
    public float forex_selling { get; set; } 
    public float banknote_buying { get; set; } 
    public float banknote_selling { get; set; } 

    public override String ToString() 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append(currency_code + ", "); 
     sb.Append(unit.ToString() + ", "); 
     sb.Append(currency_name + ", "); 
     sb.Append(currency_isim + ", "); 
     sb.Append(forex_buying.ToString() + ", "); 
     sb.Append(forex_selling.ToString() + ", "); 
     sb.Append(banknote_buying.ToString() + ", "); 
     sb.Append(banknote_selling.ToString()); 
     return sb.ToString(); 
    } 
} 

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

+0

Этот ответ включает в себя весь ToString(), я предлагаю принять его. Технически для этого прямая конкатенация строк будет самой быстрой (http://stackoverflow.com/questions/6785/is-string-format-as-efficient-as-stringbuilder), но это хороший ответ (включая код цикла Я продемонстрировал, и ты золотой) – Tawnos

0

Сделайте логику печати где-нибудь. Затем:

foreach (Currency c in dict.Values) { 
    // c.Print(), or MyPrinterHandler.Print(c), or whatever... 
} 

Если вы собираетесь выполнять сериализацию, чтобы упростить задачу, сделайте свой класс сериализуемым. Как сказано в комментариях к вопросу, тип словаря не является сериализуемым. Я не помню, было ли это запечатанным - если это не так, вы можете сделать сериализуемый дочерний класс, хотя я предпочел бы сериализовать класс, содержащий ваши данные.

+2

Как отметил @ I4V, вы * можете * сериализовать словарь с помощью JavaScriptSerializer, а не 'XmlSerializer'. – Bobson

6
public class Currency 
{ 
    ... 
    public override string ToString() 
    { 
    return String.Format("Currency Code: {0}\nUnit:{1}...",...); 
    } 
} 

foreach (string key in dict.Keys) 
{ 
    Console.WriteLine("Key: {0}\nValue{1}", key, dict[key].ToString()); 
} 

Переопределить ToString, перебрать все ключи/значения и распечатать.

+0

Nice steal ... молодцы. – DonBoitnott

+0

Прошу прощения за то, что вы предложили в комментарии при вводе ответа. Я оставил ваш комментарий как минимум v.v – Tawnos

+0

Нет вреда, друг. Это был такой день. Сожалею. – DonBoitnott

Смежные вопросы