2009-09-21 3 views
11

Từ khóa params có thực sự không được hỗ trợ trong các phương thức mở rộng không?C# sử dụng thông số và phương pháp mở rộng

Tôi thấy rằng khi tôi tạo các phương thức mở rộng với từ khóa params, tôi nhận được "Không có phương thức quá tải cho X mất 2 đối số". Intellisense nhận ra phương thức mở rộng và thậm chí biết rằng nó cần một mảng đối tượng.

Dưới đây là một số mẫu mã:

public static DalRow EasyRetrieveSingle(this DalRow dalRow, object[] parameters) 
{ 
    Dictionary<string, object> dic = new Dictionary<string, object>(); 
    for (int i = 0; i < parameters.Length; i += 2) 
     dic.Add(parameters[i].ToString(), parameters[i + 1]); 

    List<DalRow> list = DalRow.RetrieveByFieldValues(dalRow.Structure, null, dic).Cast<DalRow>().ToList(); 
    if (list.Count == 0) return null; 
    return list[0]; 
} 

Dưới đây là một số mẫu mã mà các cuộc gọi nó (vô ích)

(new X()).EasyRetrieveSingle(1, 2); 
+4

trình cho tôi. Có vẻ như bạn đang thiếu 'params' trong đoạn mã của mình? –

+0

Wow! Đây phải là cái đầu lạnh lẽo. Lời xin lỗi của tôi cho câu hỏi. – Daniel

+0

Đừng lo. Xin đừng thay đổi tiêu đề, như xấu hổ như bạn cảm thấy, nó sẽ giúp những người khác googling cùng một vấn đề – johnc

Trả lời

23

Dường như bạn đang thiếu những từ khóa params ...

public static DalRow EasyRetrieveSingle(this DalRow dalRow, params object[] parameters) 
8

Bạn đang thiếu từ khóa params trong phương thức khai báo của mình sự.

public static DalRow EasyRetrieveSingle(
    this DalRow dalRow, params object[] parameters) 
          ↑ 

này biên dịch và chạy một cách hoàn hảo:

static class Extensions 
{ 
    public static void Test(this Program program, params object[] args) { } 
} 

class Program 
{ 
    static void Main() 
    { 
     new Program().Test(1, 5); 
    } 
}