看板 Soft_Job 關於我們 聯絡資訊
各位大家好,今天有一個小小想法。 時常我們在處理字串時,常常會去空格或空白。 假設我有一個Class 裡面的屬於String 的Property的值都要去空白。 我靠著這篇討論寫出來,http://ppt.cc/l8pY 以下討論內容不考慮實務上的合理性,僅探討程式碼。 畢竟實務真的這樣寫也太奇怪。 圖文版:http://ppt.cc/CLoU 寫法大概是: foreach (var property in MyClass.GetType().GetProperties()) { if (property.PropertyType.ToString() == "System.String") property.SetValue(MyClass, property.GetValue(MyClass, null).ToString().Replace(" ", ""), null); } 我想把它包成一個Function,寫成: private static object TrimSpace(object MyClass) { foreach (var property in MyClass.GetType().GetProperties()) { if (property.PropertyType.ToString() == "System.String") property.SetValue(MyClass, property.GetValue(MyClass, null).ToString().Replace(" ", ""), null); } return MyClass; } 可是,這樣會是一個object,感覺不太好。 又看了看那篇文章,寫出另外一種方法: public class ClassFix<T> where T : class { public static T StringReplaceSpace(T oObj) { foreach (var property in oObj.GetType().GetProperties()) { if (property.PropertyType.ToString() == "System.String") property.SetValue(oObj, property.GetValue(oObj, null).ToString().Replace(" ", ""), null); } return oObj; } } 寫這麼多,問題來了。 我雖然寫出最後一段,可是我卻完全不了解為何。 想請大家看有沒有甚麼可以搜尋相關資訊的建議或方向。 我不了解的點: 1.public class ClassFix<T> where T :class 這樣的寫法應該要怎麼用言語解釋? 不知道<T>這樣到底是怎麼樣去說明。 2.最後那段寫法,算是一個Function嗎?還是,屬於一種擴充? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.194.233.173
blackie1019:1:不就泛型(Generic) 01/21 23:03
blackie1019:2:泛型的應用,建議可以搭配反映 (Reflection)較佳 01/21 23:04
blackie1019:以上是我的看法,那個不就是多打得沒有其他意思..抱歉 01/21 23:05
needforsleep:Class<T> 中文=泛型 http://goo.gl/v8yrUA 01/21 23:06
kkman021:blackie1019大,別在意!個人功力不佳,見笑見笑。 01/21 23:10
kkman021:先謝兩位大大回應。 01/21 23:10
andymai:手邊沒VS~但是應該PropertyType可以直接判斷typeof(String 01/21 23:34
andymai:)不用ToString去和寫死的字串比對吧?另外...這兩個寫法不 01/21 23:35
andymai:都是傳回原來的物件嗎?有差?而且都寫成static了... 01/21 23:37
kkman021:andymai 確實可以直接用typeof判斷,沒想過!又學一招。 01/21 23:39
kkman021:恩,兩中方法基本上都是回傳原來物件。主要是想說, 01/21 23:40
kkman021:後者可以知道自己傳甚麼樣的object進去處理。 01/21 23:41
andymai:瞭解~確定型別看來是會好一點... 01/21 23:44
shiengchyi:真要實用 可以去Google Extension Method 01/22 00:13
okWen:如果傳入的物件不是繼承object的呢 (菸 01/22 00:18
andymai:可以不繼承object? 01/22 05:35
chrischen:.net中所有類別都隱含繼承 Object 01/22 08:48
juriolegend:如果property有唯讀或唯寫好像就會error要加點判斷 01/22 09:28
realmeat:所有的oo的程式語言在宣告物件有不繼承object的嗎? 01/22 10:16
chatnoir:你的property在get或set的時候直接replace value會不會 01/22 16:52
chatnoir:比較簡單一點@@? 01/22 16:53
kkman021:chatnoir 這問題是想讓自己看更多而硬寫的方法。哈哈 01/23 11:51