日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

《XNA高级编程:Xbox 360和Windows》3-6

發(fā)布時(shí)間:2024/4/14 windows 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《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類中,也包含一些類似GetDirectoryCutExtension的方法,不過StringHelper類中用來處理文件名的最有用的方法之一就是ExtractFilename,它去掉了文件的路徑名和擴(kuò)展名,僅僅剩下文件的名字。Path類中的GetFileNameWithoutExtension方法也可以做類似的操作,不過出于某些原因我還是更喜歡自己的方法。如果您想實(shí)現(xiàn)自己的方法,并需要一些實(shí)際的工作代碼,這會(huì)很有趣。再強(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é)果是否在正確:

Assert.AreEqual("SomeFile",
????????????????StringHelper.ExtractFilename(
"SomeDir\\SomeFile.bmp"));

輸出列表

???? StringHelper類中另一個(gè)比較特殊的方法是WriteArrayData,它把像列表、數(shù)組以及IEnumerable數(shù)據(jù)輸出為文本字符串,這樣它們就可以被寫入日志文件中。它的實(shí)現(xià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類型、特殊的集合類型、byteinteger數(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的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。