2009-01-08 26 views
0

在Ruby中,方法這改變物體對最終轟然:string.downcase!有沒有辦法使「破壞性」字符串方法a-la Ruby?

在C#中,你必須做的:foo = foo.ToLower()

有沒有一種方法,使像一個擴展方法:

foo.ConvertToLower()

那會操縱foo

(我認爲答案是否定的,因爲字符串是不可變的,你不能在一個擴展方法做一個ref this

回答

0

不,你不能在擴展方法中做到這一點。要重新分配作爲參數傳入的變量的值,必須使用參數ref參數修飾符通過引用來傳遞它,但擴展方法不允許使用該參數。 即使這可能,也可能沒有可重新分配的變量,如"foo".ConvertToLower()

3

有變異String實例的兩種方式:

  • 思考
  • 不安全的代碼

我不建議您使用它們。你的開發人員會永遠恨你 - 特別是如果這種方法曾被用來改變一個字符串恰好是一個文字...

+0

沒錯,但我可以重新分配一個字符串變量。我只想要一個擴展方法來爲我做。 – brendanjerwin 2009-01-08 16:33:54

+0

你不能那樣做。如果你稱爲「Foo」,那麼你會發生什麼?ConvertToLower()?即使你可以,我也不會 - 這將是非常不明顯的代碼來閱讀。 – 2009-01-08 17:07:50

-3

你當然可以編寫一個擴展方法來重新分配正在操作的字符串。例如:

public static void ConvertToLower(this string s) 
{ 
    s = s.ToLower(); 
} 

這與字符串的不可變性無關。

相關問題