2010-06-25 17 views
5

Có thể sử dụng indexers với các phương thức extension.Cách sử dụng các bộ chỉ mục với các Phương thức mở rộng có tham số và các cuộc gọi hàm

ví dụ: Xem xét nó như là một ví dụ duy nhất.

public static object SelectedValue(this DataGridView dgv, string ColumnName) 
    {    
     return dgv.SelectedRows[0].Cells[ColumnName].Value; 
    } 

EDIT

  1. sử dụng mygrid.SelectedValue("mycol")

  2. Làm thế nào để sử dụng nó như một indexer mygrid.SelectedValue["mycol"] chứ không phải trên một.

  3. Có thể sử dụng nó như thế này không? mygrid.SelectedValue["mycol"](out somevalue);

Cú pháp nhận loại giá trị này là gì. Bất kỳ ví dụ hoặc liên kết đơn giản nào cũng sẽ hoạt động.

Trả lời

4

Vâng, có hai vấn đề ở đây:

  • C# không (bởi và lớn) hỗ trợ tên indexers
  • C# không hỗ trợ thuộc tính mở rộng, vì vậy bạn không thể làm cho SelectedValue thuộc tính trả lại nội dung có thể lập chỉ mục thay vì

Vì vậy, cú pháp bạn đã chỉ định sẽ không hoạt động. Bạn thể được điều này để làm việc:

mygrid.SelectedValue()["mycol"] 

nhưng đó là một chút xấu xí. Tôi muốn gắn bó với mẫu phương thức nếu tôi là bạn.


C# 4 hỗ trợ gọi điện thoại đặt tên indexers trên các đối tượng COM.

+0

@Jon: Tôi cần tạo loại chỉ mục nào ở đây trong trường hợp đó. http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx. Tôi đọc liên kết này để tạo chỉ mục nhưng nó sẽ hoạt động như thế nào trong lớp mở rộng. Có thể sử dụng điều này trong lớp tĩnh vì tôi cũng cần tạo chỉ mục cũng tĩnh –

+0

Tôi cũng thích phương thức được chỉ định ở trên trong ques cho đến khi tôi đã đặt tên chỉ mục mà tôi phải bắt đầu làm việc trên C# 4 –

+0

hỗ trợ các chỉ mục có tên trên COM? – simendsjo

0

Hãy để tôi cố gắng làm rõ cách sử dụng và ý định của Extension Method.

Xem xét một Extension Method

public static bool IsNullOrEmpty(this string source) 
{ 
    return source == null || source == string.Empty; 
} 

Bây giờ bạn mở rộng lớp string của bạn với điều này Extension Method

var myString = "Hello World"; 
Assert.AreEqual(myString.IsNullOrEmpty(), false); 

Đây là những gì NET hiện trên biên soạn:

public static bool IsNullOrEmpty(string source) 
{ 
    return source == null || source == string.Empty; 
} 

usin g trường cũ của chúng tôi

var myString = "Hello World"; 
Assert.AreEqual(IsNullOrEmpty(myString), false); 

Phương pháp mở rộng không gì khác ngoài việc trực quan hóa những gì chúng tôi đã từng làm.

Vâng, có thể mở rộng các chỉ mục nhưng Microsoft không nghĩ về nó.

Các vấn đề liên quan