我发现自己在使用C#中的文本解析器时经常需要删除字符串的第一行。我把一个简单的函数放在一起为我做,但是来自PHP背景,我不知道在哪里放它,因为我不能在类外定义一个函数。在.NET中这样做的习惯方式是什么?我是否创建了一个静态类来存储我的函数?
答案 0 :(得分:20)
我通常会创建一个Helper或Utility静态类,然后在其中放置相应的辅助函数。
此外,我尝试将Helper和Utility类逻辑分组 - 将文本解析函数与对象转换函数放在一起是荒谬的。使用TextUtils类和ConversionUtils类清除混淆。
答案 1 :(得分:18)
是的,静态助手类通常是这样做的。
此外,在C#3中,您可以声明如下方法:
public static string RemoveFirstLine(this string s) {
...
}
使其成为一种扩展方法。然后你可以在任何字符串上调用它,就像在字符串类型本身上声明了方法一样。
答案 2 :(得分:6)
小心!
交叉切割的通用实用程序函数应该位于更高的实用程序命名空间中。字符串解析,文件操作等
扩展对象应该位于自己的命名空间中。
应用于指定业务对象或方法集的实用程序函数应位于这些对象的命名空间内。通常使用Helper后缀,即BusinessObjectHelper。 命名在这里很重要。您是在为其他方法创建容器,还是将它们组合成专门的对象(即解析器)更有意义?
答案 3 :(得分:4)
我认为没有这方面的标准。我倾向于创建一个名为BlahUtil的静态类。对于您的示例,我将其作为StringUtil
上的静态方法。这有助于我将相关方法分组到合理的单元中,从而更容易发现它们并在团队中共享它们。
您也可以选择将这些方法中的哪些方法作为扩展方法公开(因为c#3.0):
public static class StringUtil
{
public static string RemoveFirstLine(this string multiLineString)
{
// ...
}
}
答案 4 :(得分:3)
如果您使用的是C#3.0,则可能需要考虑使用扩展方法!
public static class StringExtensions
{
public static string RemoveFirstLine(this string myString)
{
return myString.Remove("line..!");
}
}
然后在代码中你可以这样做:
string myString = "Hello World etc";
string removedLineString = myString.RemoveFirstLine();
答案 5 :(得分:2)
通常我会创建一个Utilities类并定义静态辅助方法。
答案 6 :(得分:1)
我已经完成了静态“帮助”类,但经过一些分析后;这种类型的辅助函数总是最终作为一个独特的类实现。在您的情况下,您将拥有一个“基本文本解析器”类和一个覆盖“解析”方法的派生类。
答案 7 :(得分:0)
我会为这些函数创建一个静态工作者类。也许不是最好的方式,但保持简单的那个......;)
ķ
答案 8 :(得分:0)
使用extension method作为字符串。这就是它们的用途。
答案 9 :(得分:0)
您可以使用具有静态方法的类。像ParserUtils.RemoveFirstLine()之类的东西。在.NET 3.5及更高版本中,当实用程序函数与您无法修改的类(如String类)相关时,有时可以使用扩展方法。 Intellisense将在项目中的任何字符串对象上显示扩展方法。
答案 10 :(得分:0)
在这种情况下,扩展是可行的方法。它确实将你的功能添加到了出现的位置。唯一的问题是,2008年不可能采用静态方法。