2011-08-31 28 views
6

Lý do tôi hỏi là vì tôi đã viết một phương pháp mở rộng để sử dụng trong Silverlight chỉ để tìm ra tính năng đó bắt đầu làm việc cho ánh sáng bạc.Có lý do tại sao System dll khác với Silverlight và các thư viện C#

Ví dụ

string sentence = "I am a sentence that has some words"; 
sentence.Contains("N"); //would return false, silverlight true 
sentence.Contains("n"); //would return true, silverlight true 

Tại sao lại có một hệ thống dll đặc biệt trong khuôn khổ cho Silverlight mà không được comparsion như trường hợp insenstive?

Tôi đã thực hiện điều này cho hàng tấn phương pháp, điều đó gây phiền toái khi chúng hoạt động khác hoặc chỉ thiếu nói chung.

+0

tôi chủ yếu là kích thích rằng có sự khác biệt điên trong hệ thống giữa nói: c: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ Silverlight \ v4.0 \ system.dll C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0 \ System.dll Cả hai hệ thống và System.String.Contains() hoạt động khác nhau, nó có nhiều phiền toái hơn bất cứ điều gì nhưng tôi tiếp tục chạy thành những thứ nhỏ như thế này –

+1

Tôi vừa thử nghiệm trên một dự án Silverlight tiêu chuẩn; Nó đã trả về 'false' như mong đợi –

Trả lời

3

Lý do tôi hỏi là vì tôi đã viết một phương pháp mở rộng để sử dụng trong Silverlight chỉ để tìm ra tính năng kỳ diệu bắt đầu hoạt động cho ánh sáng bạc.

Có một phương pháp public bool string.Contains(string) cho tất cả các phiên bản của .NET từ 2,0 trở lên (2.0, 3.0, 3.5, 4.0, SL 3/4 WP 7.0/7.1).

Điều thú vị là phiên bản SL chỉ được liệt kê từ SL 3/4 - là bạn có thể cập nhật từ giải pháp 2.0 không? Điều đó có thể rồi giải thích cho điều đó.

Nếu không, phương pháp đã xác định luôn được ưu tiên hơn phương pháp mở rộng, vì vậy phương pháp mở rộng của bạn sẽ không bao giờ được gọi (chúng tôi có thể loại trừ .NET 1.1 vì trình biên dịch C# 1.2 không bao gồm các phương pháp mở rộng).

Đối với .NET 2.0 tài liệu MSDN này như:

Phương pháp này thực hiện một từ (case-sensitive và văn hóa nhạy cảm) tìm kiếm bằng cách sử dụng văn hóa hiện hành. Tìm kiếm bắt đầu tại vị trí ký tự đầu tiên của chuỗi này và tiếp tục thông qua vị trí ký tự cuối cùng.

Tất cả các phiên bản khác (bao gồm Silverlight) được liệt kê như:

Phương pháp này thực hiện một thứ tự (case-sensitive và văn hóa-insensitive) so sánh. Tìm kiếm bắt đầu tại vị trí ký tự đầu tiên của chuỗi này và tiếp tục thông qua vị trí ký tự cuối cùng.

Nếu bạn đang nhìn thấy khác (xin treble kiểm tra), nó có thể là một lỗi khuôn khổ ... nhưng tôi đang thận trọng chờ đợi một lời giải thích đơn giản hơn.

+0

Vâng tôi thấy nó bắt đầu trong phiên bản 3 & 4. Nhưng tôi đoán câu hỏi của tôi chỉ là lý do tại sao họ không đưa ra .Có cùng một sự vô cảm với phiên bản không phải là bạc để giữ nó phù hợp không? –

+1

@Cubicle er ... họ đã làm? ít nhất đó là những gì MSDN nói. –

+1

@Cubicle Tôi đã làm rõ các dấu ngoặc kép MSDN; trong .NET 2.0 nó phân biệt chữ hoa chữ thường, nhạy cảm với văn hóa; trong ** mọi thứ khác ** nó phân biệt chữ hoa chữ thường, không nhạy cảm với văn hóa. Vì vậy, một trong hai cách, nó phải phân biệt chữ hoa chữ thường –

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