我们假设,例如我有一个字符串,我想逃避它,并且好好阅读)
需要一个可以解决这个问题的工作扩展
我试过了。var t = "'";
t.Escape();// == "%27" (what i need), but it not assign result to var. t
t = t.Escape();//works, but ugly.
和扩展名
public static string Escape(this string string_2)
{
if (string_2.HasValue())
string_2 = Uri.EscapeDataString(string_2);
return string_2;
}
如何修复此扩展程序?
答案 0 :(得分:5)
t = t.Escape();
是.NET中用于更改字符串的常用习惯用法。例如。 t = t.Replace("a", "b");
我建议你使用它。这是必要的,因为strings are immutable。
有很多方法,但它们是IMO的丑陋。例如,您可以使用ref
参数(但不能使用扩展方法):
public static string Escape (ref string string_2) { ... }
Util.Escape(ref t);
或者你可以创建一个类似于String的类,它是可变的:
public class MutableString { /** include implicit conversions to/from string */ }
public static string Escape (this MutableString string_2) { ... }
MutableString t = "'";
t.Escape();
我提醒您,如果您使用t = t.Escape();
以外的任何内容,从而偏离正常使用,您可能会混淆将来读取代码的任何人。
答案 1 :(得分:1)
StringBuilder
。
所以你可以做这样的事情:
public static void Escape(this StringBuilder text)
{
var s = text.ToString();
text.Clear();
text.Append(Uri.EscapeDataString(s));
}
但使用它并不会那么棒:
StringBuilder test = new StringBuilder("'");
test.Escape();
Console.WriteLine(test);
真正的答案是使用“难看的”字符串重新分配
t = t.Escape();//works, but ugly.
你会习惯的。 :)