2010-03-31 3 views
0

У меня небольшая проблема, связанная с этим утверждением, любая помощь была бы удивительной.Строка .NET содержит строку []

string betaFilePath = @"C:\resultsalpha.txt"; 
StringBuilder sb = new StringBuilder(); 
using (FileStream fs = new FileStream(betaFilePath, FileMode.Open)) 
using (StreamReader rdr = new StreamReader((fs))) 
{ 
    while (!rdr.EndOfStream) 
    { 
     string betaFileLine = rdr.ReadLine(); 
     { 
      string[] onlythese = {@"apple/",@"aee/",@"www/",@"blk/",@"art/",@"purp/",@"ora/",@"red/",@"brd/",@"biek/",@"biz/"}; 
      if (betaFileLine.Contains(onlythese)) 
      { 
       File.AppendAllText(@"C:\testtestest.txt", betaFileLine); 

      } 
     } 
    } 

Ошибка: Аргумент '1': не удается преобразовать из 'строку []' на 'строка' -> если (betaFileLine.Contains (onlythese))

+0

Что вы пытаетесь начертить - строки, содержащие * любые * из этих строк, или строки, содержащие * все * из них? –

+0

строки, содержащие любые из них – 2010-03-31 14:15:26

+0

Не забывайте о регулярных выражениях :) это может стать полем Code Golf, он он. –

ответ

4

Вы не можете передать массив в String.Contains - вам нужно будет петлю через строку [] и проверьте каждый, или использовать LINQ:

if(onlythese.Any(a => betaFileLine.Contains(a))) 
2

Попробуйте

if (onlythese.Any(only => betaFileLine.Contains(only)) 

Вам понадобится `using System.Linq; '

10

LINQ на помощь!

if(onlythese.Any(str => betaFileLine.Contains(str))) 
{ 
    // ... 
} 
+0

Я собираюсь поддержать вас только за первое заявление :) – cjk

+0

Да, нет смысла держать мой дублированный ответ. – ChaosPandion

0

Просто проверить для каждого из них:

bool isOK = false; 

foreach (string current in onlythese) 
    if (betaFileLine.Contains(current)) 
    { 
    isOK = true; 
    break; 
    } 

if (isOK) 
{ 
    File.AppendAllText(@"C:\testtestest.txt", betaFileLine); 
} 
0

string.Contains принимает одну строку в качестве параметра вместо массива строк.

Простой способ заключается в петле через onlyThese и гнездо содержит заявление внутри:

string[] onlythese = {@"apple/",@"aee/",@"www/",@"blk/",@"art/",@"purp/",@"ora/",@"red/",@"brd/",@"biek/",@"biz/"}; 
foreach(string onlyThis in onlythese) 
{ 
    if (betaFileLine.Contains(onlyThis)) 
    { 
     File.AppendAllText(@"C:\testtestest.txt", betaFileLine); 
     break; 
    } 
} 
+0

Это добавит 1 строку для КАЖДОГО матча, а не ЛЮБОГО матча. –

+0

Thx HollyStyles для указания его. Исправлено. – K2so

2

Если у вас есть Framework 3.5 использовать Linq

if(onlythese.Any(s => betaFileLine.Contains(s))) 
{ 
    File.AppendAllText(@"C:\testtestest.txt", betaFileLine); 
} 

Если нет, вы должны цикла каждой строки

bool match = false; 

foreach(String thisString in onlyThese) 
{ 
    if(betaFileLine.Contains(thisString) 
    { 
     match = true; 
     break; 
    } 
} 

if(match) 
    File.AppendAllText(@"C:\testtestest.txt", betaFileLine); 

или использовать регулярное выражение

string onlyThese = @"apple/|aee/|www/|blk/|art/|purp/|ora/|red/|brd/|biek/|biz/"; 
if (Regex.IsMatch(betaFileLine, onlyThese)) 
    File.AppendAllText(@"C:\testtestest.txt", betaFileLine); 
Смежные вопросы