2013-06-07 2 views
3

우리는 예를 들어, 내가 문자열을 가지고 있다고 가정하고, 나는 확장 오류 지정, 수정 방법?

내가 시도

이 문제를 해결 무슨 작업의 연장이 필요)를 탈출, 잘 읽고 싶은.

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

문자열은 .NET에서 변경할 수 없습니다. 변수에 새로운 값을 할당해야합니다. –

+0

문자열은 변경할 수 없으며 확장 메서드에서'ref'를 사용할 수 없으므로 그렇게 할 수 없습니다. – Blorgbeard

+0

또한, 문자열 *이 * 불변이라면 어떻게 든't'를 수정 한't.Escape()'메쏘드는 다른 문자열 메쏘드가 그렇게 작동하지 않기 때문에 추한 구문이 될 것입니다! – Blorgbeard

답변

5

t = t.Escape();은 문자열을 변경하기위한 .NET의 일반적인 관용구입니다. 예 : t = t.Replace("a", "b"); 이것을 사용하는 것이 좋습니다. 이것은 strings are immutable이기 때문에 필요합니다.

주위에는 여러 가지 방법이 있지만 IMO가 더 좋지 않습니다.

public static string Escape (ref string string_2) { ... } 
Util.Escape(ref t); 

을 또는 당신은 변경할 수있어 자신의 문자열과 같은 클래스를 만들 수 있습니다 : 예를 들어, (그러나 확장 메서드에)를 ref 매개 변수를 사용할 수

public class MutableString { /** include implicit conversions to/from string */ } 
public static string Escape (this MutableString string_2) { ... } 

MutableString t = "'"; 
t.Escape(); 

내가 당신을주의 것을 t = t.Escape(); 이외의 것을 사용하여 정상적인 사용에서 벗어난 경우 향후 코드를 읽는 사람을 혼동시킬 수 있습니다.

+0

으로 사용하여 'helper'라고 생각한 다른 클래스와 함께 사용할 수 있습니다. 어쨌든, "추한"변형이 될 것입니다. :). 고마워. – Daniel

1

C#의 "가변 문자열"의 철자는 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. 

익숙해 질 것입니다. :)

+1

[Offtopic]은 Douglas Adams와 관련된 아바타 이미지입니까? :) –

+0

@CristiDiaconescu 하하 네, 그렇습니다. 잘 발견되었습니다. :) –

관련 문제