Как определить, нет ли строки в списке, или есть ли эквивалент '! = ~'? [dубликат]

Лучшим решением является просто не использовать анонимные классы.

  public class Test {class DummyInterfaceImplementor: IDummyInterface {public string A {get;  задавать;  } public string B {get;  задавать;  }} public void WillThisWork () {var source = new DummySource [0];  var values ​​= from value in source select new DummyInterfaceImplementor () {A = значение.A, B = значение.C + "_" + значение.D};  DoSomethingWithDummyInterface (values.Cast & л; IDummyInterface & GT; ());  } public void DoSomethingWithDummyInterface (значения IEnumerable & lt; IDummyInterface & gt;) {foreach (значение var в значениях) {Console.WriteLine ("A = '{0}', B = '{1}'", value.A, value.B)  ;  }}}  

Обратите внимание, что вам нужно передать результат запроса в тип интерфейса. Возможно, это лучший способ сделать это, но я не смог его найти.

106
задан David Rogers 28 December 2010 в 00:53
поделиться

5 ответов

У вас все получилось, просто поместите пробел между ! и [[ как , если! [[

117
ответ дан SiegeX 15 August 2018 в 22:06
поделиться
  • 1
    Oye vey! Просто, когда я благополучно обойду межгалактическое особое безумие персонажа perl, я нахожу себя потерянным в пространстве bash (размещение)! (Я чувствую, как страх сжимает мою кишку, как питон.) Спасибо! – David Rogers 28 December 2010 в 17:37

Да, вы можете отменить тест, поскольку SiegeX уже указал.

Однако вы не должны использовать для этого регулярные выражения - он может выйти из строя, если ваш путь содержит специальные символы , Попробуйте это вместо:

  [[": $ PATH:"! = * ": $ 1:" *]]  

(Источник)

7
ответ дан Community 15 August 2018 в 22:06
поделиться
  • 1
    Другая причина использования этой формы заключается в том, что она не будет случайно соответствовать подстрокам (например, не добавлять «/ bin» к пути, потому что «/ usr / bin» уже существует). – Gordon Davisson 28 December 2010 в 01:54
  • 2
    Мне потребовалось некоторое время, чтобы понять, как двоеточия слева дали мне якорь, который я хотел. идея уменьшения рисунка путем добавления материала в строку, подлежащую поиску, стоит запомнить. Я не понимаю, почему специальные символы в пути нарушат решение регулярных выражений, но не решение bash pattern. Можете ли вы привести мне пример? – David Rogers 28 December 2010 в 18:13
  • 3
    Я не думаю, что это будет работать надежно во всех случаях. Соответствие регулярных выражений в превосходном IMHO – Felipe Alvarez 1 August 2015 в 01:04

Вы также можете поместить восклицательный знак в скобки:

 , если [[!  $ PATH = ~ $ temp]]  

, но вы должны привязать свой шаблон для уменьшения ложных срабатываний:

  temp = / mnt / silo / bin pattern =  "(^ |:) $ temp (: | $)", если [[!  $ PATH = ~ $ pattern]]  

, который ищет совпадение в начале или конце с двоеточием до или после него (или обоих). Я рекомендую использовать строчные или смешанные имена переменных в качестве привычки, чтобы уменьшить вероятность столкновений имен с переменными оболочки.

89
ответ дан Dennis Williamson 15 August 2018 в 22:06
поделиться
  • 1
    Ах, спасибо за напоминание о якоре. Идея использования строчных или смешанных имен переменных сбивает с толку начинающего bash, так как совет, который я видел до сих пор, заключается в использовании прописных букв. Я понимаю, что вы делаете, но я не видел достаточно примеров сценариев bash, чтобы чувствовать себя комфортно, отклоняясь от (моего понимания) кулинарной книги. – David Rogers 28 December 2010 в 17:33
  • 2
    @anyoneis доверяет нам это. Следует избегать использования пользовательских переменных верхнего регистра. Все переменные в bash расширяются с помощью $ , поэтому нет причин заглатывать их, чтобы они выделялись. – SiegeX 1 January 2011 в 20:53
  • 3
    Я нахожу , если [[! $ foo = ~ bar]] безопаснее, чем , если! [[$ foo = ~ bar]] , поскольку для легче вводить дополнительные условия, если – CTodea 27 June 2017 в 13:48

Мне нравится упрощать код без использования условных операторов в таких случаях:

  TEMP = / mnt / silo / bin [[$ {PATH} = ~ $ {TEMP}]] |  |  PATH = $ PATH: $ TEMP  
2
ответ дан dimir 15 August 2018 в 22:06
поделиться

самый безопасный способ поставить! для отрицания регулярного выражения в [[]] следующим образом:

 , если [[!  $ {STR} = ~ YOUR_REGEX]];  то  

в противном случае он может выйти из строя в определенных системах.

16
ответ дан Guildencrantz 15 August 2018 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: