2010-10-24 41 views
12
foreach(var filter in filters) 
{ 
    var filterType = typeof(Filters); 
    var method = filterType.GetMethod(filter); 
    if (method != null) value = (string)method.Invoke(null, new[] { value }); 
} 

Có cách nào không phân biệt chữ hoa chữ thường không?GetMethod không phân biệt chữ hoa chữ thường?

Trả lời

22

Có, sử dụng BindingFlags.IgnoreCase:

var method = filterType.GetMethod(filter, 
    BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); 

Hãy coi chừng sự mơ hồ có thể, bạn sẽ nhận được một AmbiguousMatchException.

+0

Nếu có sự mơ hồ, điều gì sẽ xảy ra? Nó sẽ chỉ trả lại cái đầu tiên mà nó tìm thấy? – mpen

+0

@Logan: Cảm ơn :) Đây là loại kỳ lạ mặc dù; nếu thay đổi duy nhất tôi thực hiện cho mã trên là thêm 'BindFlags' arg, mã của tôi ngừng hoạt động. 'method' trở thành null, ngay cả với BindingFlags.Default. Điều gì sẽ khiến nó ngừng khớp * mọi thứ *? – mpen

+0

@Mark - lỗi của tôi, cờ mặc định không còn áp dụng nữa. Đã cập nhật bài đăng. –

2

Hãy xem biến thể này của GetMethod, đặc biệt lưu ý rằng một trong số BindingFlags có thể là IgnoreCase.

3

Để có được một phương pháp mà hành động như GetMethod (lọc), ngoại trừ việc nó bỏ qua các trường hợp bạn cần:

var method = filterType.GetMethod(filter, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance| BindingFlags.IgnoreCase); 

này sẽ không làm việc: var method = filterType.GetMethod (lọc, BindingFlags.IgnoreCase);

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