2012-05-04 25 views
2

我是.NET和C#的新手,來自Ruby中的背景。雖然我已經用C#成功開發了幾個小應用程序,但我仍然需要學習很多。有一件令我困惑的事情是找到一種有效的方法來調用對象上的多個方法。我將給出一個使用字符串的例子。C中的雛菊鏈方法#

我已經習慣了能夠做這樣的事情在Ruby中:

my_string = "The quick brown fox\tjumped over the lazy dog\t\n" 
puts my_string.strip.split("\t") 

然而,爲了實現在C#一樣的東西,這是我所知道的,現在做的事:

var myString = "The quick brown fox\tjumped over the lazy dog\t\n"; 
var myStringTrim = myString.Trim(); 
var myStringSplit = myStringTrim.Split('\t'); 
foreach (var s in myStringSplit) 
    { 
     Console.WriteLine(s); 
    } 

那麼,有沒有一種更有效的方式來完成這個在C#中?

這個特殊的例子讓我想知道如果我使用這種方法來讀取,解析和處理大型文本文件或類似的東西,性能會怎樣。

回答

7

您可以在C#中做myString.Trim().Split('\t');

你可以做到這一點,因爲Trim()返回string對象,然後你就可以調用Split()上,它返回一個數組。

但它不一定更「高效」。臨時對象正在創建中,即使您沒有將它們存儲在變量中。

+0

好的...我有很多東西需要學習。感謝所有人,這樣快速的迴應。 –

+0

這被稱爲[Fluent Interfaces](http://en.wikipedia.org/wiki/Fluent_interface)。 –

2

您可以像這樣一起連鎖以下命令:

myString.Trim().Split('\t').ForEach(s => Console.WriteLine(s)); 
+0

.ForEach無法保證速度。實際上它可能是相反的 – Hao

+0

@Hao你爲什麼認爲這可能是相反的? – phoog

4

這工作就好了... ...

var myString = "The quick brown fox\tjumped over the lazy dog\t\n".Trim().Split('\t'); 

這些方法是String對象的實例方法,並且將只是工作,你期望他們在Ruby中做。

要記住的一件事是字符串是不可變的。也就是說,這些方法不會更改字符串變量的原始值,而是返回原始的修改副本。