2015-08-13 5 views
-5

У меня есть кодировка ниже, где я использую оператор if.Использование операторов «if» внутри переменной

var qisg = new QuoteItemSectionGroup 
{ 
    SectionGroup = db.SectionGroups.Where(x => x.Name == "Longitudinals" && x.Section == TruckSection.FloorSpecification).First(), 
    //If statement below. 
    StockItem = quoteItem.BodyType.Name == "Insulated" ? db.StockItems.Where(x => x.StockCode == "SCH095").First() : db.StockItems.Where(x => x.StockCode == "SCH100").First(), 
}; 

То, что я хочу знать, как бы создать более одного if заявление внутри линии, где я объявляю StockItem. Или если есть лучший способ сделать это, не используя заявление if, пожалуйста, дайте мне знать :)

Спасибо!

+3

_ «Я использую оператор if». _ Вы используете условный оператор, а не оператор 'if'-. Кроме того, почему вы не можете использовать '&&', поэтому 'Name ==" Insulated "&& otherCondition'? –

+0

@Tim Schmelter - Спасибо за комментарий. Как я уже сказал, я не очень хорош в C# и все еще очень новичок во всем, но спасибо за совет! :) – CareTaker22

+0

Ради следующего человека, чтобы прийти, если инициализация потенциально может быть сложной, разделите ее на отдельную функцию. –

ответ

1

Можно цепи: вызовы, как это

predicateA ? expressionA : predicateB ? expressionB : expressionC 

Это было бы эквивалентно

if (predicateA) 
{ 
    expressionA 
} 
else if (predicateB) 
{ 
    expressionB 
} 
else expressionC 

Я бы, однако, рекомендуем вам реорганизовать ваш код немного. Что-то вроде этого, может быть?

var stockCode = quoteItem.BodyType.Name == "Insulated" ? "SCH095" : "SCH100"; 

... 

    StockItem = db.StockItems.Where(x => x.StockCode == stockCode).First(); 

И затем оттуда.

1

Как этот

 StockItem = (quoteItem.BodyType.Name == "Insulated" 
         ? db.StockItems.Where(x => x.StockCode == "SCH095").First() 
         : (condition 
           ? db.StockItems.Where(x => x.StockCode == "SCH100").First() 
           : (nextcondition 
             ? true 
             : false))); 

и так далее. Но я не думаю, что это хороший стиль. Читаемость для других и для вас через несколько месяцев не будет увеличена;)

0

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

+0

В C# это называется «Условный оператор», а не тернарный оператор. –

+0

Он называется условным оператором, хотя он является тернарным оператором (он имеет три операнда). –

+0

Это синонимы: https://en.wikipedia.org/wiki/%3F: – Bigsby

0

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

См. Ссылку на использование вложенного условного оператора.

http://twistedoakstudios.com/blog/Post5273_how-to-read-nested-ternary-operators

0

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

StockItem = quoteItem.BodyType.Name == "Insulated" ? 
       db.StockItems.Where(x => x.StockCode == "SCH095").First() 
       : db.StockItems.Where(x => x.StockCode == "SCH100").First() 

Используйте это так:

StockItem = quoteItem.BodyType.Name == "Insulated" ? 
       db.StockItems.Where(x => x.StockCode == "SCH095").First() 
       : (quoteItem.BodyType.Name == "unInsulated") ? 
          db.StockItems.Where(x => x.StockCode == "SCH995").First() 
          : db.StockItems.Where(x => x.StockCode == "SCH110").First() 

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

1

Вы используете Ternary Operator. И Да вы можете добавить столько условий, сколько хотите, но это будет плохая практика программирования. Используйте операторы if для нескольких условий. Explanation of Ternary Operators Explanation of if statments

Demo 1 (Использование троичной операторы):

StockItem = quoteItem.BodyType.Name == "Insulated" ? 
          db.StockItems.Where(x => x.StockCode == "SCH095").First() : 
         (quoteItem.BodyType.Name == "Promoted"? 
             db.StockItems.Where(x => x.StockCode == "SCH100").First(): 
             db.StockItems.Where(x => x.StockCode == "SCH148").First()); 

Demo 2 (Использование Если Statement):

StockItem stockItem=null; 
if(quoteItem.BodyType.Name == "Insulated") 
{ 
    stockItem = b.StockItems.Where(x => x.StockCode == "SCH095").First(); 
} 
else if(quoteItem.BodyType.Name == "Promoted") 
{ 
    stockItem = b.StockItems.Where(x => x.StockCode == "SCH100").First(); 
} 
else 
{ 
    stockItem = b.StockItems.Where(x => x.StockCode == "SCH148").First(); 
} 
2

Я думаю, что лучше всего было бы

string Condition(string cond) 
{ 
    switch(cond) 
    { 
     case "Insulated": 
      return "SCH095"; 
      ... 
    } 
} 
StockItem = db.StockItems.Where(x => x.StockCode == Condition(quoteItem.BodyType.Name)).First(); 
Смежные вопросы