2009-11-09 70 views

Trả lời

26

C# 'yield return tương đương với yield của Python và yield break chỉ là return bằng Python.

Khác với những khác biệt nhỏ đó, về cơ bản chúng có cùng mục đích.

+0

năng suất trong C# là không chính xác bằng với lợi tức của Python. Nếu hàm của bạn không làm gì ngoại trừ ngắt dòng (trả về bằng Python), bạn sẽ nhận được một Enumerator trống trong khi một None trong python. –

+1

Đó là một cú pháp cú pháp nhỏ của Python; bạn có thể sử dụng 'return; yield' để có được một máy phát điện trống. –

+0

Ngoài ra 'yield' trong Python là một biểu thức có thể nhận các giá trị từ trang lặp. 'yield return' là một câu lệnh. – Elazar

6

Sự khác biệt quan trọng nhất là năng suất python mang đến cho bạn một iterator, một khi nó hoàn toàn được lặp đó là kết thúc.

Nhưng lợi nhuận C# mang lại cho bạn một nhà máy "", bạn có thể chuyển nó và sử dụng nó ở nhiều nơi trong mã của bạn mà không liên quan đến việc nó đã được "lặp" trước đây chưa.

Hãy ví dụ này trong python:

In [235]: def func1(): 
    .....:  for i in xrange(3): 
    .....:   yield i 
    .....: 

In [236]: x1 = func1() 

In [237]: for k in x1: 
    .....:  print k 
    .....: 
0 
1 
2 

In [238]: for k in x1: 
    .....:  print k 
    .....: 

In [239]: 

Và trong C#:

class Program 
{ 
    static IEnumerable<int> Func1() 
    { 
     for (int i = 0; i < 3; i++) 
      yield return i; 
    } 

    static void Main(string[] args) 
    { 
     var x1 = Func1(); 
     foreach (int k in x1) 
      Console.WriteLine(k); 

     foreach (int k in x1) 
      Console.WriteLine(k); 
    } 
} 

Cung cấp cho bạn: nghỉ

0 
1 
2 
0 
1 
2 
Các vấn đề liên quan