1

私はこのようなクラスを持っています

    public class foo
    {

        private void getThread()
        {
         var AllThreads = from sc in db.ScreenCycles
                          join s in db.Screens on sc.ScreenID equals s.ScreenID
                          select s;
        }
    }

AllThreads 変数をメソッド変数ではなくクラス変数にしたいと考えています。このような...

public class foo
{
    var AllThreads;
    private void getThread()
    {
       AllThreads = from sc in db.ScreenCycles
                          join s in db.Screens on sc.ScreenID equals s.ScreenID
                          select s;
    }
}

var 型のクラス変数を宣言することはできません。

どうすればこれを達成できますか?

4

7 に答える 7

2

次のようにできます。

public class foo {    
  IEnumerable<string> AllThreads;    

  private void getThread() {
     AllThreads = (from sc in db.ScreenCycles
                      join s in db.Screens on sc.ScreenID equals s.ScreenID
                      select s.Screen1 + " " + sc.Thread);
  }
}

Joel の提案に従って更新されました。

于 2009-05-08T21:23:23.767 に答える
1

var は、ローカル宣言としてのみ使用できます。LINQ 式から返された型を使用する場合は、オブジェクトを作成する必要があります。

于 2009-05-08T21:24:59.737 に答える
1

元のコードを保存するには、これを試してください

public class foo

    IEnumerable<ScreenCycles> AllThreads;
    private void getThread()
    {
       AllThreads = from sc in db.ScreenCycles
                          join s in db.Screens on sc.ScreenID equals s.ScreenID
                          select s;
    }

}
于 2009-05-08T21:25:55.477 に答える
0

初期変数は無名クラスを定義しています。何をするためには、クラスを定義する必要があります。

しかし...おそらくこれを行うことができます:

List<string> AllThreads;
于 2009-05-08T21:24:17.913 に答える
0

OK、これは答えではありません。このスレッドが非常によく示している、stackoverflow の質問に対する比較的初心者です。

このサイトのコード マークアップ ツールは、非常にユニークです。この特定のケースで私が理解できないのは、すべてのコメント コードブロックが非常に長いのはなぜですか? それはOPがしたことですか?以前の例のさまざまな編集にうんざりしていて、何らかの理由で、コードが入っていたテキストボックスがその内容よりもはるかに長くなっています。(IE8)

于 2009-05-08T21:40:08.983 に答える
0

varクラスレベルでは使用できません。すぐに初期化しない場合は、明示的な型を指定する必要があります。

「s」がタイプ名「Screen」であると仮定します。

public class foo
{
    IEnumerable<Screen> AllThreads;
    private void getThread()
    {
       AllThreads = from sc in db.ScreenCycles
                          join s in db.Screens on sc.ScreenID equals s.ScreenID
                          select s;
    }
}
于 2009-05-08T21:26:44.383 に答える
0

多くの人が言ったように、var は使用できません。Linq 型を使用するようにコードをリファクタリングします。

public class foo 
{
    ScreenCycle[] allThreads;
    private void getThread() 
    { 
        allThreads = (from sc in db.ScreenCycles join s in db.Screens on sc.ScreenID 
                     equals s.ScreenID select s).ToArray(); 
    } 
}
于 2009-05-08T21:33:50.043 に答える