3.6 StringHelper类

StringHelper类是最大的辅助类之一,估计它是我写的第一个辅助类,因为针对字符串的处理操作非常多,很容易就可以想到一些方法来改善性能,更容易地处理字符串列表,输出字符串数据等等。

看一下StringHelper类的结构图(如图3-9所示),您会发现它的方法非常多,重载的方法支持很多不同类型的参数。它还包含大量的单元测试,前面您就曾见过一个。

图3-9

您可能会问为什么这个类中的方法那么多,而单元测试却那么少。这是因为很多年前我就开始写这个类了,而那个时候还没开始使用单元测试。其中有些方法现在在.Net 2.0 Framework中已经被实现了,所以它们也就没有太大的意义,不过我还是习惯于使用自己写的方法,我只是希望其中的某些方法对您能有所帮助。要想熟练使用这么多的方法的确需要一些时间,不过当您发现某个方法可以满足您进行一项复杂的字符串操作时,您或许会感谢我(当然也可能是感谢您自己,如果您有自己的辅助类的话)。

提取文件名

在System.IO命名空间的Path类中,也包含一些类似GetDirectory、CutExtension的方法,不过StringHelper类中用来处理文件名的最有用的方法之一就是ExtractFilename,它去掉了文件的路径名和扩展名,仅仅剩下文件的名字。Path类中的GetFileNameWithoutExtension方法也可以做类似的操作,不过出于某些原因我还是更喜欢自己的方法。如果您想实现自己的方法,并需要一些实际的工作代码,这会很有趣。再强调一次:您不必自己写Path类中已经存在的方法,除非您不知道Framwork中已经提供了,或者您想自己去研究一下。

我已经很久没有测试StringHelper类中方法的处理性能了,不过我猜大多数方法的处理速度要比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)

给这样的方法写单元测试也很简单,使用下面的代码来检查输出的结果是否在正确:

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

输出列表

StringHelper类中另一个比较特殊的方法是WriteArrayData,它把像列表、数组以及IEnumerable数据输出为文本字符串,这样它们就可以被写入日志文件中。它的实现也非常简单:

/// <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类继承而来的,所以可以给这个方法传递动态列表类型。另外,对于Array类型、特殊的集合类型、byte和integer数组类型以及IEnumerable类型也都存在对应的重载版本,不过使用非引用类型的重载操作速度会更快。

可以使用下面的代码来测试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()

转载于:https://www.cnblogs.com/AlexCheng/archive/2010/05/11/2120331.html

《XNA高级编程:Xbox 360和Windows》3-6相关推荐

  1. 《XNA高级编程:Xbox 360和Windows》1-1

    第一部分 XNA Framework基础 第一章 XNA简介 欢迎进入XNA的世界.作为一个游戏程序员,你大概了解一些DirectX的知识以及XNA Framework的基础.这一章主要介绍怎样安装X ...

  2. 《XNA高级编程:Xbox 360和Windows》1-2

    1.2免费获取XNA Game Studio Express 要开始编写代码,您必须确保已经安装了一些工具,其中IDE是您快速开始的一个非常重要的工具.如果您已经安装并配置了XNA Game Stud ...

  3. 《XNA高级编程:Xbox 360和Windows》5-1

    第五章编写自己的XNA图像引擎 5.1本章概览 在本书的第一部分,您学习了XNA Framework,使用SpriteBatch类渲染2D图像,并且做了几个有趣的小游戏.现在,是时候探索更加令人兴奋的 ...

  4. 北通xbox360模拟器_如何将无线Xbox 360控制器连接到计算机

    北通xbox360模拟器 The wired Xbox 360 controller is USB, so using it for PC gaming is easy–but things get ...

  5. Windows Phone 7游戏高级编程:使用XNA Game Studio 4

    <Windows Phone 7游戏高级编程:使用XNA Game Studio 4> 基本信息 原书名:Professional Windows Phone 7 Game Develop ...

  6. xbox360链接pc_如何在Windows PC上使用Xbox 360控制器

    xbox360链接pc The keyboard and mouse might be a good fit for many native computer games, but it feels ...

  7. Windows高级编程学习笔记(一)

    写在前面的话 之前学的Windows编程都是界面啊.网络编程啊之类的纯应用层面的东西,总是感觉而自己没有达到自己期望中的水平.什么水平呢?如果让你编写监控系统资源的工具,或者DLL注入相关软件,或者底 ...

  8. [STM32F1]基于STM32F103实现Xbox 360 Controller for Windows 之Xinput

    上个月由于家里有事,实现了并枚举成功的Xinput,就差数据处理没有完成,请假在家,客户急要,只好请同事改改,玩usb hid已经差不多两年了,至今也算没有实现Xbox 360 Controller ...

  9. ASP.NET MVC 4高级编程(第4版)

    <ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway Phil Haack Brad Wilson K. Scott Allen 译者: 孙远 ...

最新文章

  1. 如何从值中删除数组中的项目?
  2. linux++编译线程,用G ++编译多线程代码
  3. Ajax与CustomErrors的尴尬
  4. mysql(2)—— 由笛卡尔积现象分析数据库表的连接
  5. system函数的返回值和执行脚本的返回值
  6. vue+elementUI开发实践问题总结
  7. 最近总结——关于自己的基础问题
  8. MySQL 开源工具集合
  9. 视频直播 > 最佳实践 > 如何降低延时
  10. Xcode 4-PBXcp error修复-No such file or directory
  11. Linux安装时遇到的问题 Intel VT-x处于禁用状态
  12. windows下github的使用心得
  13. IDEA下载并安装SVN教程
  14. 计算机键盘图 指法,键盘指法练习图
  15. 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
  16. php融云开发文档,融云公众服务
  17. SPA项目开发(首页导航左侧菜单)
  18. 【javaEE】网络编程套接字
  19. 搜狗校招编程题-建房子
  20. WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)

热门文章

  1. wpf 控件大小随窗体大小改变而改变
  2. 北京科技大学研究生考试 《工程热力学》(2003年-2011年)
  3. 学习《html5.css3.0》网页布局和样式精粹(第二天)
  4. cisco路由器基本实验之九 PAT的配置(Packet Tracer)
  5. android studio 初次使用Kotlin(环境准备篇)
  6. Android AppWidgetProvider应用
  7. Adapter.getView convertView(重用View) ViewHolder(避免findViewById)
  8. TCP协议可靠性保证(确认应答机制,超时重传机制,流量控制,拥塞窗口)
  9. Android如何给通知channel静音
  10. Android 点击应用外的Url拉起应用