2013-04-24 36 views
6

Sử dụng TypeConverter.ConvertFromString(), tôi cần cung cấp định dạng tùy chỉnh khi phân tích dữ liệu từ chuỗi (ví dụ: DateTime: "ddMMyyyy" hoặc "MMMM dd, yyyy").Phân tích chuỗi trong các định dạng tùy chỉnh bằng cách sử dụng TypeConverter.ConvertFromString()

TypeConverter.ConvertFromString() có tình trạng quá tải như sau:

public object ConvertFromString(ITypeDescriptorContext context, 
           CultureInfo culture, 
           string text); 

tôi đã kiểm tra trên MSDN về ITypeDescriptorContext.

Giao diện ITypeDescriptorContext cung cấp thông tin theo ngữ cảnh về thành phần. ITypeDescriptorContext thường được sử dụng tại thiết kế thời gian để cung cấp thông tin về vùng chứa thiết kế thời gian. Giao diện này thường được sử dụng trong chuyển đổi loại.

Điều này nghe giống như những gì tôi cần sử dụng nhưng tôi không thể tìm thấy bất kỳ ví dụ nào ở bất kỳ đâu.

Tôi đang sử dụng các phương pháp chung như sau:

public T ParseValue<T>(string value) 
{ 
    return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(value); 
} 

Ví dụ mã gọi:

DateTime date = ParseValue<DateTime>("02062001"); 
decimal amount = ParseValue<decimal>("1.3423"); 

Tôi muốn để có thể phân tích một số loại thông tin định dạng generic vào ParseValue() phương pháp này có thể được được sử dụng bởi ConvertFromString().

+0

@ Bob- Bởi vì đôi khi tôi sẽ phân tích cú pháp từ chuỗi thành các loại dữ liệu khác (không chỉ 'Ngày giờ '). Tôi cần sử dụng 'TypeDescriptor' để tôi có thể có được cơ chế phân tích thích hợp khi chạy. – davenewza

+0

Tôi đang bối rối, bạn muốn chuyển đổi một DateTime, được biểu diễn như một chuỗi, với các kiểu dữ liệu khác? Vì vậy, thích một int? –

+0

@ Bob- Tôi đã chỉnh sửa bài đăng của mình bằng nhiều ví dụ về mã hơn. Cảm ơn – davenewza

Trả lời

2

Bạn có thể tạo một CultureInfo tùy chỉnh, giữ định dạng của bạn.

Một giải pháp khác là Chuyển đổi gói trong một số phương thức trợ giúp có thể sử dụng DateTime.Parse cho ngày và TypeConverter cho các loại khác.

+0

Tôi đã xem xét rằng (tôi cũng sẽ cần phải xác định định dạng số khi phân tích thập phân, âm, vv), nhưng nó có vẻ như một overkill phải tạo một đối tượng CultureInfo giả và chỉ ghi đè lên một số tài sản có liên quan. Và sau đó, 'ITypeDescriptorContext' thực sự là gì? Cảm ơn vi đa trả lơi :) – davenewza

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