作者kkman021 (自以為鄉民)
看板Soft_Job
標題[請益] 關於.net技術問題
時間Tue Jan 21 22:59:36 2014
各位大家好,今天有一個小小想法。
時常我們在處理字串時,常常會去空格或空白。
假設我有一個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
→ 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