ジョアン・ゴメス:
私は、文字列内の[]内の単一のサブストリングを交換するための作業コードを持っています。これは、文字列に「[1]」のために働いていました:
private string returnWithLinks(string adminString, int adminId)
{
var returnString = "Nothing at all";
int pFrom = adminString.IndexOf("[") + "[".Length;
int pTo = adminString.LastIndexOf("]");
var getSourceId = adminString.Substring(pFrom, pTo - pFrom);
int i = 0;
bool tryParse = int.TryParse(getSourceId, out i);
if(!tryParse) {returnString = "this is not an int!";} else {
if(i == 1) {
returnString = adminString.Replace("[1]", "<a>something</a>" + var1fromsomwhere + i);
} else if (i == 2) {
returnString = adminString.Replace("[2]", "<a>other something</a>" + var2fromsomwhere + i);
} else if (i == 3) {
returnString = adminString.Replace("[3]", "<a>other something</a>" + var3fromsomwhere + i);
} else if (i == 4) {
returnString = adminString.Replace("[4]", "<a>other something</a>" + var4fromsomwhere + i);
} else if (i == 5) {
returnString = adminString.Replace("[5]", "<a>other something</a>" + var5fromsomwhere + i);
}
}
return returnString;
}
しかし、私は今のようなトークンのすべての出現箇所を交換できるようにする必要があります。
adminString = "[1][2]somthingelse[2]another[4]aa";
私は、もし節でそれぞれint型のループ、int配列にトークン内のすべてのint型を置くことを考えましたが、配列を作成することはcompletlyアウト私のleageのです。
私はこれをどのように達成することができますか?
配列をした後、私は、if節とそれをループます。
ジョナサン・アルファロ:
あなたは、配列、あるいはループを必要としません。
これを行うには...例えば、辞書を使用して、多くの方法があります。
しかし、あなたのケースで物事を複雑にする必要はありません。
単一のコード行は、このようなすべてのものに置き換えられます。
private string returnWithLinks(string adminString, int adminId)
{
var returnString = adminString
.Replace("[1]", "<a>something</a>" + var1fromsomwhere + 1)
.Replace("[2]", "<a>something</a>" + var2fromsomwhere + 2)
.Replace("[3]", "<a>something</a>" + var3fromsomwhere + 3)
.Replace("[4]", "<a>something</a>" + var4fromsomwhere + 4)
.Replace("[5]", "<a>something</a>" + var5fromsomwhere + 5);
return returnString;
}
辞書とループを行います:
private static readonly Dictionary<string, string> _replacements = new
Dictionary<string, string>
{
{ "[1]", "<a>something</a>" + var1fromsomwhere + 1 },
{ "[2]", "<a>something</a>" + var2fromsomwhere + 2 },
{ "[3]", "<a>something</a>" + var3fromsomwhere + 3 },
{ "[4]", "<a>something</a>" + var4fromsomwhere + 4 },
{ "[5]", "<a>something</a>" + var5fromsomwhere + 5 },
};
private string returnWithLinks(string adminString, int adminId)
{
var keys = _replacements.Keys.ToArray();
var returnString = adminString;
for(var i = 0; i < keys.Length; i++)
{
var key = keys[0];
returnString = returnString.Replace(key, _replacements[key]);
}
return returnString;
}
あなたが見ることができるように辞書には、クリーナーが、コードの行の維持及び数の点ではまったく同じものであるようです。
あなたはまだ、すべての交換のための辞書に行を追加する必要があります。
辞書がハードコードされていない場合、私は辞書でループでそれを行うだろう唯一の理由は次のようになります。
辞書は、例えば、データベースからの値で満たされている場合を意味します。
ループのもう一つの欠点は、文字列の割り当て反復ごとに1つの余分割当量です。