2015-08-11 9 views
-3

Я новичок в C#. Я написал цикл foreach, но как я могу вспомнить переменные за пределами цикла. Спасибо за вашу помощь.как вызвать переменную в foreach Loop C#

Вот мой код:

static void Main(string[] args) 
{ 
    IDictionary<string,float> IDico=new Dictionary<string,float>(); 
    IDico.Add("D1",1); 
    IDico.Add("D2",2); 
    IDico.Add("D3",3); 

    string tempo="D2"; 

    foreach(var element in IDico.Keys) 
    { 
    if(tempo.Contains(element in IDico.Keys) 
    { 
     var outPut=IDico[element] 
    } 
    } 
    var call=outPut // How can I call outPut outside the for loop?Because the outPut doesn't exist for this row. 

} 
+2

Заявить его за пределы цикла и назначить его внутри. Для этого вам нужно использовать конкретный тип вместо 'var'. –

+0

Вы имеете в виду, что я определяю float outPut вне цикла, outPut = IDico [element], и я могу позвонить в конце? –

+0

Да, thats correct –

ответ

3

Это ваш код

static void Main(string[] args) 
{ 
    IDictionary<string,float> IDico=new Dictionary<string,float>(); 
    IDico.Add("D1",1); 
    IDico.Add("D2",2); 
    IDico.Add("D3",3); 

    string tempo="D2"; 
    float outPut = 0.0; 
    foreach(var element in IDico.Keys) 
    { 
    if(tempo.Contains(element)) 
    { 
     outPut=IDico[element] 
    } 
    } 
    //Do stuff with outPut 
} 

однако я думаю, что вы, возможно, пытается найти темп в словаре так на самом деле вы просто должны это сделать:

static void Main(string[] args) 
{ 
    IDictionary<string,float> IDico=new Dictionary<string,float>(); 
    IDico.Add("D1",1); 
    IDico.Add("D2",2); 
    IDico.Add("D3",3); 

    string tempo="D2"; 
    float outPut = 0.0; 
    if(IDico.Contains(tempo)) 
    { 
     outPut=IDico[tempo]; 
    } 
    //Do stuff with outPut 
} 
+0

Вы могли бы объяснить часть if (tempo.Contains (элемент IDico.Keys), потому что я не понимаю, почему вы используете два раза. И у меня все еще есть ошибка: использование неназначенной локальной переменной outPut –

+0

Если 'IDico' имел некоторую запись, имеющую значение «0f», здесь «вывод» мог бы быть неоднозначным в отношении источника значения, который он получает: от его инициализации или от некоторой записи «IDico»? Лучше объявить «float?» для вывода Затем проверьте, не обрабатывается ли он больше null. – Hopeless

+0

Обновлен мой ответ, я не уверен, что пытается быть достигнутым с вопросом. –

0
static void Main(string[] args) 
{ 
    IDictionary<string,float> IDico=new Dictionary<string,float>(); 
    IDico.Add("D1",1); 
    IDico.Add("D2",2); 
    IDico.Add("D3",3); 

    string tempo="D2"; 
    string outPut = string.Empty; 

    foreach(var element in IDico.Keys) 
    { 
     if(tempo.Contains(element)) 
     { 
      outPut = IDico[element] 
     } 
    } 

    var call = outPut; 
} 

Если outPut can contai n более одного элемента из вашего словаря рассматривают использование и массив или список. Если вы хотите остановить итерацию после того, как найдете совпадение, используйте перерыв; в выражении if, чтобы после того, как совпадение найдено, цикл остановится.

Кроме того, вы захотите объявить outPut вне цикла, чтобы он не декларировал себя на каждой итерации цикла.

Я также исправил инструкцию contains для вас, а также использовал неправильный синтаксис.

+0

Thx для вашей помощи. –