2017-04-01 6 views
1

「を使用」にIDisposableをユーザコードで参照されていませんusing声明?アクセスは、私は、コードのこの部分を持っているステートメント

私はいくつかのように書くことが、意味:

[Reflection?, another stuff?]aと同等でなければなりません
using(myFunction()){ 

    [Reflection?, another stuff?].Process(); 

} 

インスタンス(myFunction()で返される値)がusingスコープに存在するIDisposableの方法Dispose()が適切に発射されているので、私は、確信しています。

手がかりはありますか?

+0

これはXYの問題を引き起こします。あなたは実際に何を達成しようとしていますか? – BradleyDotNET

+0

確かに、スタック上の思考を参照したいだけなら。しかし、私はC#がそのように動作するとは思わない。これは、_assembler_ – MickyD

+0

ではありません。こんにちはBradley、私はいくつかのプロセスを記録するコードを書いています。私はそのトピックについて興味があります。 Dispose()メソッドが起動されているため、インスタンスがスコープに存在することはわかりますが、宣言せずにそのインスタンスにアクセスすることは可能ですか? –

答えて

1

myFunctionの結果を使用する場合は、変数を宣言して使用する必要があります。

myFunctionは、nullを返すことができます。戻り値の型の拡張メソッドとしてProcessmyFunctionと定義できます。そうすれば、nullは無視され、null参照例外は発生しません。

+0

はい、100%がDanielに同意しますが、myFunction()の結果がスコープに存在する間はどこで知りたいのですか?別の方法でアクセスすることが可能です。どうも。 –

+2

@SebastiánGuerreroコンパイラは、それを一時変数に隠します。 –

+0

したがって、その一時変数はC#/ .Netランタイム環境の範囲外ですか? –

1

最後に作成したインスタンスを静的フィールドに入れることができるとします。私はあなたがこれを複数回同時にしたくないと願っています。

static void Main(string[] args) 
{ 
    using (myFunction()) 
    { 
     myClass.LastInstance.Process(); 
    } 
    Console.ReadLine(); 
} 
static myClass myFunction() 
{ 
    return new myClass(); 
} 
class myClass : IDisposable 
{ 
    public static myClass LastInstance; 
    public myClass() 
    { 
     Console.WriteLine("constructor"); 
     LastInstance = this; 
    } 
    public void Dispose() { Console.WriteLine("dispose"); } 
    public void Process() { Console.WriteLine("process"); } 
} 
+0

クリエイティブなソリューション! –

関連する問題