1

我有两个函数,我似乎在软件中包含了很多用于在类型之间转换字符串和字节数组。用法是这样的:

string str = "Hello world";
byte[] b = strToByteArray(str);

首先,有没有办法可以将它包含在 System 命名空间中,这样我就不必再在代码中定义它了?

其次,有没有办法将它定义为字符串类的一部分,所以用法更像:

string str = "Hello world";
byte[] b = str.ToByteArray();
4

8 回答 8

7

您所要求的由Extension Methods在 C# 中提供。

于 2012-05-30T15:39:46.230 回答
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。同样,这通常是不受欢迎的,您仍然必须引用包含定义的程序集。

于 2012-05-30T15:40:52.207 回答
2

不要重新发明轮子,而是使用Encoding类。

于 2012-05-30T15:40:32.757 回答
0

您所需要的只是namespace中的自定义扩展方法System

namespace System
{
    public static class StringExtensions
    {
        public static byte[] ToByteArray(this string source)
        {
            // return result
        }
    }
}
于 2012-05-30T15:41:11.210 回答
0

请参阅为什么在 C# 中使用 global 关键字?有关其他信息...您可以添加 using 语句来实现您正在寻找的语义,或者您可以使用 global 关键字。

于 2012-05-30T15:41:12.847 回答
0
  1. 不; C# 不支持顶级函数

  2. 您正在寻找扩展方法。

于 2012-05-30T15:40:17.590 回答
0

您可以为字符串编写一个扩展方法来满足您的需要: http ://csharp.net-tutorials.com/csharp-3.0/extension-methods/

然后你可以用每个字符串调用它:

byte[] b = "Hello world".ToByteArray();

对于实现,您可以顺便使用 Encoding.GetBytes

于 2012-05-30T15:40:52.400 回答
0

首先,有没有办法可以将它包含在 System 命名空间中,这样我就不必再在代码中定义它了?

???你想要什么?

系统命名空间?将它们放入系统命名空间中的(静态)类中。命名空间与程序集、dll 等无关——你可以使用任何你喜欢的东西。

另外,做大多数人都会做的事——用工具类开始一个项目。我周围有一些用于通用代码。

于 2012-05-30T15:46:39.507 回答