我有两个函数,我似乎在软件中包含了相当多的类型转换字符串和字节数组。用法是这样的:
string str = "Hello world";
byte[] b = strToByteArray(str);
首先,有没有一种方法可以将它包含在System命名空间中,这样我就不用再在代码中定义它了?
其次,有没有办法将它定义为字符串类的一部分,因此用法更像是:
string str = "Hello world";
byte[] b = str.ToByteArray();
答案 0 :(得分:7)
您要求的内容由C Extension Methods提供。
答案 1 :(得分:4)
为什么不使用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
中。同样,这通常是不受欢迎的,您仍然需要引用包含定义的程序集。
答案 2 :(得分:2)
请勿重新发明轮子,请改用 Encoding 类。
答案 3 :(得分:0)
没有; C#不支持顶级功能
您正在寻找扩展方法。
答案 4 :(得分:0)
您可以为字符串编写扩展方法,以满足您的需要: http://csharp.net-tutorials.com/csharp-3.0/extension-methods/
然后你可以用每个字符串调用它:
byte[] b = "Hello world".ToByteArray();
对于实现,你可以使用Encoding.GetBytes
答案 5 :(得分:0)
您需要的只是名称空间System
中的自定义Extension Method。
namespace System
{
public static class StringExtensions
{
public static byte[] ToByteArray(this string source)
{
// return result
}
}
}
答案 6 :(得分:0)
有关其他信息,请参阅Why use the global keyword in C#? ...您可以添加using语句来实现您要查找的语义,也可以使用global关键字。
答案 7 :(得分:0)
首先,有没有办法可以在System命名空间中包含它,所以我不必在其中定义它 代码了吗?
???你想要什么?
系统命名空间?将它们放入系统命名空间中的(静态)calass中。命名空间与程序集,dll等没什么关系 - 你可以使用你喜欢的任何东西。
Oterhwise,做大多数人做的事 - 用工具类开始一个项目。我有一些我用于公共代码的。