《XNA高级编程:Xbox 360和Windows》3-6
生活随笔
收集整理的這篇文章主要介紹了
《XNA高级编程:Xbox 360和Windows》3-6
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
3.6 StringHelper類
???????? StringHelper類是最大的輔助類之一,估計(jì)它是我寫的第一個(gè)輔助類,因?yàn)獒槍?duì)字符串的處理操作非常多,很容易就可以想到一些方法來改善性能,更容易地處理字符串列表,輸出字符串?dāng)?shù)據(jù)等等。
???? 看一下StringHelper類的結(jié)構(gòu)圖(如圖3-9所示),您會(huì)發(fā)現(xiàn)它的方法非常多,重載的方法支持很多不同類型的參數(shù)。它還包含大量的單元測(cè)試,前面您就曾見過一個(gè)。
圖3-9
???? 您可能會(huì)問為什么這個(gè)類中的方法那么多,而單元測(cè)試卻那么少。這是因?yàn)楹芏嗄昵拔揖烷_始寫這個(gè)類了,而那個(gè)時(shí)候還沒開始使用單元測(cè)試。其中有些方法現(xiàn)在在.Net 2.0 Framework中已經(jīng)被實(shí)現(xiàn)了,所以它們也就沒有太大的意義,不過我還是習(xí)慣于使用自己寫的方法,我只是希望其中的某些方法對(duì)您能有所幫助。要想熟練使用這么多的方法的確需要一些時(shí)間,不過當(dāng)您發(fā)現(xiàn)某個(gè)方法可以滿足您進(jìn)行一項(xiàng)復(fù)雜的字符串操作時(shí),您或許會(huì)感謝我(當(dāng)然也可能是感謝您自己,如果您有自己的輔助類的話)。提取文件名
???? 在System.IO命名空間的Path類中,也包含一些類似GetDirectory、CutExtension的方法,不過StringHelper類中用來處理文件名的最有用的方法之一就是ExtractFilename,它去掉了文件的路徑名和擴(kuò)展名,僅僅剩下文件的名字。Path類中的GetFileNameWithoutExtension方法也可以做類似的操作,不過出于某些原因我還是更喜歡自己的方法。如果您想實(shí)現(xiàn)自己的方法,并需要一些實(shí)際的工作代碼,這會(huì)很有趣。再?gòu)?qiáng)調(diào)一次:您不必自己寫Path類中已經(jīng)存在的方法,除非您不知道Framwork中已經(jīng)提供了,或者您想自己去研究一下。
???? 我已經(jīng)很久沒有測(cè)試StringHelper類中方法的處理性能了,不過我猜大多數(shù)方法的處理速度要比Path類中的快得多。
///?<summary>
///?Extracts?filename?from?full?path+filename,?cuts?off?extension
///?if?cutExtension?is?true.?Can?be?also?used?to?cut?of?directories
///?from?a?path?(only?last?one?will?remain).
///?</summary>
static?public?string?ExtractFilename(string?pathFile,?bool?cutExtension)
{
????if?(pathFile?==?null)
????????return?"";
????//?Support?windows?and?unix?slashes
????string[]?fileName?=?pathFile.Split(new?char[]?{?'\\',?'/'?});
????if?(fileName.Length?==?0)
????{
????????if?(cutExtension)
????????????return?CutExtension(pathFile);
????????return?pathFile;
????}?//?if?(fileName.Length)
????if?(cutExtension)
????????return?CutExtension(fileName[fileName.Length?-?1]);
????return?fileName[fileName.Length?-?1];
}?//?ExtractFilename(pathFile,?cutExtension)
???? 給這樣的方法寫單元測(cè)試也很簡(jiǎn)單,使用下面的代碼來檢查輸出的結(jié)果是否在正確:
Assert.AreEqual("SomeFile",
????????????????StringHelper.ExtractFilename("SomeDir\\SomeFile.bmp"));
輸出列表
???? StringHelper類中另一個(gè)比較特殊的方法是WriteArrayData,它把像列表、數(shù)組以及IEnumerable數(shù)據(jù)輸出為文本字符串,這樣它們就可以被寫入日志文件中。它的實(shí)現(xiàn)也非常簡(jiǎn)單:///?<summary>
///?Returns?a?string?with?the?array?data,?ArrayList?version.
///?</summary>
static?public?string?WriteArrayData(ArrayList?array)
{
????StringBuilder?ret?=?new?StringBuilder();
????if?(array?!=?null)
????????foreach?(object?obj?in?array)
????????????ret.Append((ret.Length?==?0???""?:?",?")?+?obj.ToString());
????return?ret.ToString();
}?//?WriteArrayData(array)
???? 列表和泛型列表都是從ArrayList類繼承而來的,所以可以給這個(gè)方法傳遞動(dòng)態(tài)列表類型。另外,對(duì)于Array類型、特殊的集合類型、byte和integer數(shù)組類型以及IEnumerable類型也都存在對(duì)應(yīng)的重載版本,不過使用非引用類型的重載操作速度會(huì)更快。
???? 可以使用下面的代碼來測(cè)試WriteArrayData方法:
///?<summary>
///?Test?write?array
///?</summary>
//?[Test]
public?void?TestWriteArray()
{
????Assert.AreEqual("3,?5,?10",WriteArrayData(new?int[]?{?3,?5,?10?}));
????Assert.AreEqual("one,?after,?another",
????????????WriteArrayData(new?string[]?{?"one",?"after",?"another"?}));
????List<string>?genericList?=?new?List<string>();
????genericList.Add("whats");
????genericList.AddRange(new?string[]?{?"going",?"on"?});
????Assert.AreEqual("whats,?going,?on",
????????????WriteArrayData(genericList));
}?//?TestWriteArray()
轉(zhuǎn)載于:https://www.cnblogs.com/AlexCheng/archive/2010/05/11/2120331.html
總結(jié)
以上是生活随笔為你收集整理的《XNA高级编程:Xbox 360和Windows》3-6的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javadoc的使用
- 下一篇: MySQL简单查询性能分析