20

C# コードで宣言する必要がある長いバイト配列があります。私はこのようなことをします:

public static class Definitions
{
    public const byte[] gLongByteArray = new byte[] { 
        1, 2, 3,
        //and so on
    };
}

しかし、const 配列が null でのみ初期化される可能性があるというエラーが表示されます。

変更constするstaticとコンパイルされますが、問題はこれです-public static byte[] gLongByteArrayアプリが読み込まれるたびに初期化されないので宣言するときですよね?その場合、gLongByteArray変数は、メモリに読み込まれるコンパイル済みの exe/dll ファイルで定義されている配列を指すだけです。私が尋ねている理由は、この配列がかなり長く、アプリが起動するたびに、またはさらに悪いことに、このクラスが参照されるたびにプログラムが CPU サイクルを浪費したくないからです...

4

4 に答える 4

5

const配列を作成することはできません。ドキュメントによると:

クラス、構造体、配列などのユーザー定義型は、const.

このように静的読み取り専用フィールドとして宣言する必要があります

public static class Definitions
{
    public static readonly byte[] gLongByteArray = new byte[] { 
        1, 2, 3,
        //and so on
    };
}

もちろん、次のように実行時に誰かが配列要素を上書きするのを止める方法はありません。

Definitions.gLongByteArray[0] = 0xFF; 

@Virtlinkが提案する組み込みコレクションの 1 つを使用するか、それを防ぐために独自のカスタム読み取り専用配列クラスを作成する必要があります ( example )。

于 2013-03-21T23:26:02.687 に答える
0

静的クラスは、アプリケーションを最初にロードしたときに初期化されます。問題があることを具体的に測定していない限り、パフォーマンスについて心配する必要はありません。

于 2013-03-21T23:27:30.823 に答える
0

すべてのコンテンツをファイルに書き込み、リソースとして埋め込みます!

于 2015-02-04T13:44:54.067 に答える