Tôi đang cố gắng xác minh xem một biến được truyền có thể được chuyển đổi thành một loại cụ thể hay không. Tôi đã thử những điều sau đây nhưng không thể làm cho nó để biên dịch vì vậy tôi giả sử tôi đang đi về nó một cách sai lầm (Tôi mới đến C#)Tôi có thể kiểm tra xem một biến có thể được truyền sang một loại được chỉ định không?
string myType = "System.Int32";
string myValue = "42";
bool canBeCast = false;
try
{
// try to convert the value to it's intended type to see if it's valid.
var result = (Type.GetType(typeString))dataValue;
canBeCast = true;
}
catch
{
canBeCast = false;
}
Tôi đang cố gắng tránh một công tắc lớn tuyên bố dọc theo dòng của
switch(myType){
case "System.Int32":
try
{
var convertedValue = Convert.ToInt32(myValue);
}
catch (Exception)
{
canBeConverted = false;
}
break;
case "another type":
...
}
EDIT:
Ok, về cơ bản tôi có một bảng db của các loại đầu vào được biết đến giống như:
CREATE TABLE [dbo].[MetadataTypes] (
[typeName] VARCHAR (50) NOT NULL,
[dataType] VARCHAR (50) NOT NULL,
[typeRegex] VARCHAR (255) NULL
);
có thể có dữ liệu như
"StartTime","System.DateTime",null
"TicketId","System.String","$[Ff][0-9]{7}^"
Và đầu vào chức năng của tôi sẽ là một KeyValuePair dọc theo dòng của
myInput = new KeyValuePair<string,string>("StartTime","31/12/2010 12:00");
Tôi cần phải kiểm tra xem giá trị của KeyValuePair là đúng datatype được mong đợi bởi MetaDataType.
EDIT CHO ĐÁP:
Leon đã thực sự gần với giải pháp cuối cùng tôi đã đưa ra.
Để tham khảo chức năng của tôi bây giờ trông như thế này:
public Boolean ValidateMetadata(KeyValuePair<string, string> dataItem)
{
// Look for known metadata with name match
MetadataType type = _repository.GetMetadataTypes().SingleOrDefault(t => t.typeName == dataItem.Key);
if (type == null) { return false; }
// Get the data type and try to match to the passed in data item.
Boolean isCorrectType = false;
string typeString = type.dataType;
string dataValue = dataItem.Value;
try
{
var cValue = Convert.ChangeType(dataValue, Type.GetType(typeString));
isCorrectType = true;
}
catch
{
isCorrectType = false;
}
//TODO: Validate against possible regex here....
return isCorrectType;
}
loại gì về dữ liệu Bạn có kỳ vọng không? Bạn được yêu cầu xử lý? – dlev
nó không phải là một diễn viên, nó là một chuyển đổi –
ok, Int32 chỉ là một ví dụ về một loại tôi có thể cố gắng để xác nhận. Nó có thể là DateTime, Boolean, Decimal, v.v. – Nick