2016-05-03 8 views
1

私はDelphiプログラムをC#に変換する必要があり、 'WITH'には問題があります これに対して適切な変換ができません。どんな助けも素晴らしいだろう。 私は問題を抱えているスニペットを添付しました。 QueryLchistoryはSQLクエリですが、whileループ内で実行されたステートメントも削除しました。DelphiからC#への変換

with QueryLcHistory do begin 
First; 
RemainingMargin := 0; 

    while (not Eof) and Another test Case 
     do begin 
     //Statements #1 
     Next; 
    end; 

    while (not Eof) and Another test Case2 
     do begin 
    // Statements #2 
     Next; 
    end; 
end; {with} 
+1

ループではないと。 withと同等のC#はありません。あなたが何を意味するのかを理解していなければ、ドキュメントを読んでください。ここで尋ねる前にそれをしてください。 –

答えて

4

withがないことを唯一のものは、その範囲の名前空間にそのオペランドを推進しています。
これは、このプレフィックスが有効なすべての識別子に、QueryLcHistory.の接頭辞を付けたことを意味します。
この特別な処理は、with文のbegin-endブロック内でのみ実行され、その後は通常どおりに処理されます。

C#にはwithステートメントがありませんので、withステートメントを使用せずにDelphiで作業コードを作成する必要があります。これはC#コードに変換することができません。

withを削除するには、次の手順を実行します。

  1. 、と削除と声明していたものは何でもしておき、単一の識別子始める
    {with QueryLcHistory do} begin

  2. プレフィックスを残します。

    QueryLcHistory.First;
    QueryLcHistory.RemainingMargin := 0; //etc

  3. コンパイル

  4. コンパイラはエラーを与えるすべての識別子からQueryLcHistoryを削除します。

  5. 新しいコードは、古いコードと同じように動作するようにしてください。

これで、C#に簡単に翻訳できる簡単なコードを作成できました。

では
がどのようにwithの影響を受けているではありませんされている文を知っている悪のですか?
QueryLcHistory(またはその中にあるもの)の完全なインターフェイスを覚えていない限り、あなたは知ることができません。
withがないと、スコープは明示的であり、あなたの顔にあります。 withでは、それは暗黙的かつ潜在的です。 withを使用しないでください。これは、どのステートメントがwithステートメントの範囲内にあり、どのステートメントが他のステートメントに関連しているのかを判別するのが難しいためです。

0

C#では、withステートメントに似たものはありませんが、VBではありません。

あなたはそのようなオブジェクトのプロパティを割り当てることができます。

StringBuilder sb = new StringBuilder() 
    .Append("foo") 
    .Append("bar") 
    .Append("zap"); 

をしかし、あなたは、obejct後しばらく置くことができない、とにかくあなたがQueryLcHistoryの独自のメソッドを作成することができたり、単に任意の前にQueryLcHistoryを繰り返すことができそれに適用される方法:dataTableのよう

Assumning QueryLcHistory:

int RemainingMargin = 0; 
DataRow row; 

    IEnumerator e = QueryLcHistory.rows.GetEnumerator(); 

    while (e.MoveNext() && Another test Case) { 
     row = e.Current 
     // Statements #1 
    } 

    while (e.MoveNext() && Another test Case 2) { 
     row = e.Current 
     // Statements #2 
    }