2017-10-22 1 views
-1

Oke、デリゲートメソッド、デリゲートなしでの書き方

私はデリゲートメソッドと、デリゲートを渡すフィルタを持っています。その後、メインで私はメソッドを返します。

しかし、私の質問です:どのように代理人なしでこのものを書くには?

これは私が持っているものです。

public class ProcessData 
    { 
     public Int32 Id; 
     public Int64 Memory; 
     public String Name; 
    } 



    delegate bool Predicate<T>(T obj); 


    class Program 
    { 



     static void DisplayProcesses(Predicate<Process> match) 
     { 
      var processes = new List<ProcessData>(); 
      foreach (var process in Process.GetProcesses()) 
      { 
       if (match(process)) 
       { 
        processes.Add(new ProcessData 
        { 
         Id = process.Id, 
         Name = process.ProcessName, 
         Memory = process.WorkingSet64 
        }); 
       } 
      } 
      Console.WriteLine(); 
     } 

     static Boolean Filter(Process proces) 
     { 

      return proces.WorkingSet64 >= 20 * 1021 * 1021; 

     } 
} 

// mainメソッド:

static void Main(string[] args) 
     { 

      DisplayProcesses(Filter); 
} 

は、デリゲートせずにコードを書くためにあなたに

+1

使用し 'のFunc <プロセス、ブール>' – CodingYoshi

+0

@CodingYoshiのfuncがまだデリゲートがどのように

ここメソッドからパラメータを削除します! –

+1

@brahimはい、それはですが、私はOPがデリゲート*を明示的に使いたいと思っていませんでした。質問についてはっきりしないので、私はコメントを書いた。 – CodingYoshi

答えて

1

ありがとうございましたが、ちょうどフィルタのうち、述語を取ります

proces.WorkingSet64 >= 20 * 1021 * 1021; 

static void DisplayProcesses() 
     { 
      var processes = new List<ProcessData>(); 
      foreach (var process in Process.GetProcesses()) 
      { 
       if (process.WorkingSet64 >= 20 * 1021 * 1021;) 
       { 
        processes.Add(new ProcessData 
        { 
         Id = process.Id, 
         Name = process.ProcessName, 
         Memory = process.WorkingSet64 
        }); 
       } 
      } 
      Console.WriteLine(); 
     } 
+0

これは貧弱な解決法であり、もはやOPが持つものほど柔軟ではありません。 – CodingYoshi

+0

ああ、ありがとう。 nice – LikeToDo

+0

@コーディングヨシOPはデリゲートを避けようとしています質問を読んでください –

関連する問題