[請益] 關於.net技術問題

看板Soft_Job作者 (自以為鄉民)時間12年前 (2014/01/21 22:59), 編輯推噓3(3019)
留言22則, 10人參與, 最新討論串1/1
各位大家好,今天有一個小小想法。 時常我們在處理字串時,常常會去空格或空白。 假設我有一個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

01/21 23:03, , 1F
1:不就泛型(Generic)
01/21 23:03, 1F

01/21 23:04, , 2F
2:泛型的應用,建議可以搭配反映 (Reflection)較佳
01/21 23:04, 2F

01/21 23:05, , 3F
以上是我的看法,那個不就是多打得沒有其他意思..抱歉
01/21 23:05, 3F

01/21 23:06, , 4F
Class<T> 中文=泛型 http://goo.gl/v8yrUA
01/21 23:06, 4F

01/21 23:10, , 5F
blackie1019大,別在意!個人功力不佳,見笑見笑。
01/21 23:10, 5F

01/21 23:10, , 6F
先謝兩位大大回應。
01/21 23:10, 6F

01/21 23:34, , 7F
手邊沒VS~但是應該PropertyType可以直接判斷typeof(String
01/21 23:34, 7F

01/21 23:35, , 8F
)不用ToString去和寫死的字串比對吧?另外...這兩個寫法不
01/21 23:35, 8F

01/21 23:37, , 9F
都是傳回原來的物件嗎?有差?而且都寫成static了...
01/21 23:37, 9F

01/21 23:39, , 10F
andymai 確實可以直接用typeof判斷,沒想過!又學一招。
01/21 23:39, 10F

01/21 23:40, , 11F
恩,兩中方法基本上都是回傳原來物件。主要是想說,
01/21 23:40, 11F

01/21 23:41, , 12F
後者可以知道自己傳甚麼樣的object進去處理。
01/21 23:41, 12F

01/21 23:44, , 13F
瞭解~確定型別看來是會好一點...
01/21 23:44, 13F

01/22 00:13, , 14F
真要實用 可以去Google Extension Method
01/22 00:13, 14F

01/22 00:18, , 15F
如果傳入的物件不是繼承object的呢 (菸
01/22 00:18, 15F

01/22 05:35, , 16F
可以不繼承object?
01/22 05:35, 16F

01/22 08:48, , 17F
.net中所有類別都隱含繼承 Object
01/22 08:48, 17F

01/22 09:28, , 18F
如果property有唯讀或唯寫好像就會error要加點判斷
01/22 09:28, 18F

01/22 10:16, , 19F
所有的oo的程式語言在宣告物件有不繼承object的嗎?
01/22 10:16, 19F

01/22 16:52, , 20F
你的property在get或set的時候直接replace value會不會
01/22 16:52, 20F

01/22 16:53, , 21F
比較簡單一點@@?
01/22 16:53, 21F

01/23 11:51, , 22F
chatnoir 這問題是想讓自己看更多而硬寫的方法。哈哈
01/23 11:51, 22F
文章代碼(AID): #1ItejSU0 (Soft_Job)