2

タイプの形式で設定されたパブリック プロパティがListE<T>あります。

public class ListE<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

ええ、それは一口ですが、デザイナーがそれを編集可能なコレクションとして [プロパティ] ウィンドウに表示するために必要とするものです。それは!そこで、小さな [..] ボタンをクリックしてコレクションを編集し、[追加] をクリックしてアイテムをコレクションに追加します。

算術演算でオーバーフローが発生しました。

さて、これは非常に基本的な List であり、展開する配列にすぎません。全体で算術演算に近いのは展開関数だけで、それでも乗算ではなく左シフトを使用しているため、オーバーフローしません。これはすべて、この例外がデザイナー内で発生していると思わせます。おそらく、実装の詳細に対する小さな不注意が原因であると思われますが、そのシナリオをテストまたはデバッグする方法が見つかりません。誰か賢いアイデアを持っていますか?

編集: はい、私はプロパティを正常に使用できます。手動でも問題ありません。これが機能しない場合は、これにOnLoad頼る必要があると思いますが、それは理想的ではありません。:(

4

3 に答える 3

3

そのように List<T> ホイールを再発明しようとする動機は理解できませんが、質問に答えるには、「System.Diagnostics.Debugger.Break()」という行をクラスのコンストラクターに追加します。 .

次に、デザイナーでそれを使用しようとすると、デバッガーをアタッチするかどうかを尋ねるポップアップが表示されます。Visual Studio の 2 つ目のインスタンスをデバッガーとしてアタッチすると、コードにいくつかのブレークポイントを設定してデバッグを開始できるようになります。

于 2008-09-21T15:54:18.210 に答える
0

開始する場所の 1 つは、ListE`1::Count プロパティで計算を行っている可能性があることです。これに微妙な欠陥がある場合 (つまり、this.innerList.Count を返すよりも複雑である場合)、デザイナーが何らかの操作で算術オーバーフローを引き起こしている可能性があります。通常、算術オーバーフローは、特に要求されない限り発生しません。

checked
{
   // ...
}

構文。

于 2008-09-21T13:51:03.577 に答える
0

You don't have to add the Debugger.Break(); call to your code to debug it. You can just open a different instance of VS and attach to the one that you using it in and you should be able to debug it with no issues (just make sure that you have the symbols loaded).

于 2008-09-24T05:22:48.453 に答える