(SOLVED) Tôi đang xây dựng một ứng dụng có thể tự động tạo một số điều khiển dựa trên một số mô tả từ tệp XML.
Những gì tôi cần bây giờ là một cái gì đó rất giống với TryParse() phương pháp: một khả năng để kiểm tra (wihtout ném/bắt ngoại lệ), nếu một văn bản trong chuỗi biến có thể được chuyển đổi (hoặc phân tích) thành một loại, tên tôi có khác variabe (myType
).
Vấn đề là myType
có thể là bất kỳ loại NET: DateTime, Bool, Double, Int32
, vvKiểm tra xem chuỗi có thể được chuyển đổi thành loại khác không, loại khác nhau
Ví dụ:
string testStringOk = "123";
string testStringWrong = "hello";
string myType = "System.Int32";
bool test1 = CanCovertTo(testStringOk, myType); //true
bool test2 = CanCovertTo(testStringWrong, myType); //false
như thế nào CanCovertTo(string testString, string testType)
chức năng nên xem xét như thế nào?
Gần nhất tôi nhận được là mã sau:
private bool CanCovertTo(string testString, string testType)
{
Type type = Type.GetType(testType, null, null);
TypeConverter converter = TypeDescriptor.GetConverter(type);
converter.ConvertFrom(testString); //throws exception when wrong type
return true;
}
tuy nhiên, nó ném một ngoại lệ trong khi cố gắng để chuyển đổi từ chuỗi sai, và tôi không muốn sử dụng try {} catch()
cho điều đó.
Giải pháp:
private bool CanCovertTo(string testString, string testType)
{
Type type = Type.GetType(testType, null, null);
TypeConverter converter = TypeDescriptor.GetConverter(type);
return converter.IsValid(testString);
}
Tại sao bạn không muốn dùng thử/nắm bắt? – PVitt
Tại sao bạn đang cố gắng chuyển đổi một giá trị trong một hàm có tên là CanConvert? Không thể bạn chỉ cần làm "return converter.CanConvertFrom (typeof (string))" – Grrbrr404
@PVitt: nó chỉ là về "thực hành tốt nhất", tôi đã đọc rằng bạn nên tránh làm việc với trường hợp ngoại lệ với hành động chương trình bình thường. Tôi tin rằng đó là lý do tại sao phương thức TryParse() tồn tại cùng với Parse(). Thành thật mà nói, nếu có một phương pháp tốt hơn điều này, cho phép tôi làm những gì tôi cần, tôi thích cái đó hơn. :) – mj82