私はこのコードをC#でEF Core 1.2を使用しています。ここで私はテキストエリアの入力を読んでいて、それが私のパターンの1つと一致するかどうかを確認します。 1行をチェックした後、1つのパターンに一致するかどうかを知らせる状態を設定しようとしています。文字列とその状態をListに保存する方法は?
ここでは、これらの行を一時的に加えて各状態をリストに保存して、このリストをビューに渡すことができます。ここで、各行とその状態を表に表示します。
私の問題は、どのように各行に状態を保存するのですか?私は辞書を使用することを考えましたが、これが私の問題のための最善の解決策であるかどうかはわかりません。 Dictionary
を使用して
using (StringReader reader = new StringReader(Request.Form["ExpressionTextarea"].ToString()))
{
string line = string.Empty;
do
{
line = reader.ReadLine();
if (line != null)
{
string state = CheckStringLine(line);
/**** HOW TO SAVE EACH LINE PLUS ITS STATE TEMPORARILY?
//IDictionary<string, string> dictionary = new Dictionary<string, string>();
//dictionary.Add(line, status);
****/
}
} while (line != null);
//***PASSING MY LIST TO MY VIEW
return View(MYLIST);
}
//Checks if line matches a pattern
public string CheckStringLine(string Line)
{
string state = "";
//Pattern1: (Ein | Eine) A ist (ein | eine) B.
string pattern1 = @"^(?<Artikel1>(Ein|Eine){1})\s{1}(?<Second>[A-Z]{1}[a-zäöüß]{1,})\s{1}ist\s{1}(?<Artikel2>(eine|ein){1})\s(?<Fourth>[A-Z]{1}[a-zäöüß]{1,})\.$";
//Pattern2: (Ein | Eine) A (oder (ein | eine) B)+ ist (ein | eine) C.
string pattern2 = @"^(?<First>(Ein|Eine){1})\s{1}(?<Second>[A-Z]{1}[a-zäöüß]{1,})(\s{1}oder\s{1}(?<OptionalArtikel>(ein|eine){1})\s{1}(?<OptionalBegriff>[A-Z]{1}[a-zäöüß]{1,}))+(\s{1})ist\s{1}(?<Third>(eine|ein){1})\s(?<Fourth>[A-Z]{1}[a-zäöüß]{1,})\.$";
var match1 = Regex.Match(Line, pattern1);
var match2 = Regex.Match(Line, pattern2);
if (match1.Success)
{
state = "This Line is using pattern1";
return state;
}
if (match2.Success)
{
state = "This Line is using pattern2";
return state;
}
state = "No matches";
return state;
}
すべてのキーが一意である限り、辞書は良好に聞こえる。それ以外の場合は、C#7のタプルデータ型 –