我有两个函数,我似乎在软件中包含了很多用于在类型之间转换字符串和字节数组。用法是这样的:
string str = "Hello world";
byte[] b = strToByteArray(str);
首先,有没有办法可以将它包含在 System 命名空间中,这样我就不必再在代码中定义它了?
其次,有没有办法将它定义为字符串类的一部分,所以用法更像:
string str = "Hello world";
byte[] b = str.ToByteArray();
我有两个函数,我似乎在软件中包含了很多用于在类型之间转换字符串和字节数组。用法是这样的:
string str = "Hello world";
byte[] b = strToByteArray(str);
首先,有没有办法可以将它包含在 System 命名空间中,这样我就不必再在代码中定义它了?
其次,有没有办法将它定义为字符串类的一部分,所以用法更像:
string str = "Hello world";
byte[] b = str.ToByteArray();
您所要求的由Extension Methods在 C# 中提供。
你为什么不使用System.Text.Encoding.Unicode.GetBytes
?
首先,有没有办法可以将它包含在 System 命名空间中,这样我就不必再在代码中定义它了?
我不知道您所说的“不再在代码中定义它”是什么意思。你可以添加任何你想要的东西System
,但这通常是不受欢迎的。说啊
namespace System {
// add classes here
}
C# 没有您想要的顶级方法。Eric Lippert之前已经讨论过这个问题。
其次,有没有办法将它定义为字符串类的一部分,所以用法更像:
我想你可以定义一个扩展方法string
:
public static class StringExtensions {
public static byte[] GetBytes(this string s) {
// do something and return byte[]
}
}
如果需要,请将其放在命名空间中System
。同样,这通常是不受欢迎的,您仍然必须引用包含定义的程序集。
不要重新发明轮子,而是使用Encoding类。
您所需要的只是namespace中的自定义扩展方法System
。
namespace System
{
public static class StringExtensions
{
public static byte[] ToByteArray(this string source)
{
// return result
}
}
}
请参阅为什么在 C# 中使用 global 关键字?有关其他信息...您可以添加 using 语句来实现您正在寻找的语义,或者您可以使用 global 关键字。
不; C# 不支持顶级函数
您正在寻找扩展方法。
您可以为字符串编写一个扩展方法来满足您的需要: http ://csharp.net-tutorials.com/csharp-3.0/extension-methods/
然后你可以用每个字符串调用它:
byte[] b = "Hello world".ToByteArray();
对于实现,您可以顺便使用 Encoding.GetBytes
首先,有没有办法可以将它包含在 System 命名空间中,这样我就不必再在代码中定义它了?
???你想要什么?
系统命名空间?将它们放入系统命名空间中的(静态)类中。命名空间与程序集、dll 等无关——你可以使用任何你喜欢的东西。
另外,做大多数人都会做的事——用工具类开始一个项目。我周围有一些用于通用代码。