-2

プロパティの 1 つがバイト配列であるオブジェクトがあります。

そのプロパティを というオブジェクトに割り当てますobj1。そのプロパティを変数に割り当てると{System.Byte[]}、配列ではなくオブジェクトである型が取得されます。

結果、アクセスできなくなりました。問題は、クラスを作成した人が.GetValue()メソッドを定義していないため、要素に実際にアクセスできないことですが、デバッガー ウォッチには値が表示されます。

そのオブジェクトに対して定義されている唯一のメソッドはEqualsGetTypeおよびToString(値ではなく値を返しSystem.Byteます) です。

私は運なしで次のことを試しました:

var vals = (System.Byte[])obj1    //Returns a {System.Byte[]} object
var vals = (obj1 as System.Byte[])   //Returns a {System.Byte[]} object
var vals = obj1.GetValue           //Complains that GetValue is not defined

ウォッチ ウィンドウを使用して配列の値を確認できるのに、要素へのアクセスに問題があることに気が狂いそうです。

4

3 に答える 3

0

vals[0]最初の 2 つの割り当てはどちらも正しく、またはvals.Lengthなどを使用して配列またはその要素にアクセスできるはずです。

于 2016-02-17T04:54:50.900 に答える
0

デバッガーは、コードから参照できないプライベートでアクセスできない値を含むすべての値を確認します。これは、オブジェクト指向プログラミングの一部です。アクセスできないデータに本当にアクセスしようとしている場合は、プログラムでこのデータにアクセスする方法がいくつかあります。

  • 見ようとしているオブジェクトからクラスを派生させることができ、そのクラスは非表示のデータにアクセスできます。これは、元のコードのデータ メンバーの保護レベルが である場合に発生しますprotected
  • リフレクションを使用してプライベート データ メンバーにアクセスすることもできますが、それはあなたがしようとしていることよりもはるかに高度です。

単に配列からデータにアクセスする方法を探しているのだろうか? バイト配列からデータを取得する場合は、for ループを実行します。

for (int i = 0; i < vals.Length; i++) {
    byte b = vals[i];
    // do something with b ...
}

次を使用することもできますforeach

foreach (byte b in vals) {
{
    // do something with b ...
}

配列の詳細については、 MSDN の配列チュートリアルを参照してください。(または、Googlearrays tutorial c#でお気に入りの参考サイトを選択してください。)

于 2016-02-17T04:56:15.900 に答える