1

文字列とバイト配列を型間で変換するために、ソフトウェアにかなり多く含まれていると思われる2つの関数があります。使用法は次のようなものです。

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

まず、これを System 名前空間に含めて、コードで定義する必要がなくなる方法はありますか?

第二に、それを文字列クラスの一部として定義する方法があるので、使用法は次のようになります。

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

8 に答える 8

7

あなたが求めているものは、拡張メソッドによって 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
  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

必要なのは、 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

まず、これを System 名前空間に含めて、コードで定義する必要がなくなる方法はありますか?

??? なんでしょう?

システム名前空間? それらをシステム名前空間の (静的) calass に入れます。名前空間は、アセンブリや dll などとは何の関係もありません。好きなものを使用できます。

それ以外の場合は、ほとんどの人が行うことを行います。つまり、ツール クラスを使用してプロジェクトを開始します。一般的なコードに使用するものをいくつか持っています。

于 2012-05-30T15:46:39.507 に答える