文字列を受け取るWebサービスがあります。ディクショナリに格納されている引数が有効かどうかを確認します。
この文字列には複数のキー=>値が含まれています。これらの値は文字 '+'で連結されています。
各値( "必須"、 "空でない")を検証し、それぞれを同じ名前の変数に割り当てる必要があります。ここで
は、私は、文字列から辞書を構築する方法である:スペルミスのため
string firstname;
string lastname;
string amount;
string request = "firstname=foo+lastname=bar+amout=100.58";
Dictionary<string, string> arguments = new Dictionary<string, string>();
request.Split('+').ToList<string>().ForEach(p =>
{
string[] tmp = p.Split('=');
if (tmp.Length == 2)
arguments.Add(tmp[0], tmp[1]);
});
// Validate and assign : How I do with one value : (I must find a better way)
bool isValid = true;
// check "firstname"
if(arguments.ContainsKey("firstname") && string.IsNullOrWhiteSpace(arguments["firstname"]) == false)
{
firstname = arguments["firstname"];
}
else
{
isValid = false;
Logger.Write("Invalid argument : firstname");
}
// Do this for about 20 arguments, it becomes huge...
if(isValid)
{
Console.WriteLine(firstname); // Displays foo
Console.WriteLine(lastname); // Displays bar
Console.WriteLine(amout); // Displays 100.58
}
おかげで、と申し訳ありませんが、私はフランス人です。また
request.Split('+').ToList<string>().ForEach(p =>
{
string[] tmp = p.Split('=');
if (tmp.Length == 2 && !string.IsNullOrWhiteSpace(tmp[1]))
{
// edit - if your string can have duplicates, use
// Dictionary<U,K>.ContainsKey(U) to check before adding
var key = tmp[0];
var value = tmp[1];
if(!arguments.ContainsKey(key))
{
arguments.Add(key, value);
}
else
{
//overwrite with new value
//could also maybe throw on duplicate or some other behavior.
arguents[key]=value;
}
}
else
throw InvalidOperationException("Bad dictionary string value");
});
は、私がToList->のForEachを使用する場合を疑問視します:
HMのお役に立てば幸いです。..実際の問題は何ですか? – Tigran
何を有効にしますか? –
たとえば、firstnameが辞書に存在するかどうか、辞書が空でない場合、変数 "firstname"にdictionaryの値を入力する方法を調べる方法はわかりません。事実、約20の議論があり、それぞれを検証するには非常に巨大になる。 –