我想驗證是否可以將傳遞的變量轉換爲特定的類型。我曾嘗試以下,但不能讓它編譯所以我想我會約了錯誤的方式(我是新的C#)我可以檢查一個變量是否可以轉換爲指定的類型?
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;
}
基本上,我試圖避免大規模的開關沿線的聲明
switch(myType){
case "System.Int32":
try
{
var convertedValue = Convert.ToInt32(myValue);
}
catch (Exception)
{
canBeConverted = false;
}
break;
case "another type":
...
}
編輯:
好了,基本上我認識的輸入類型的數據庫表,看起來像:
CREATE TABLE [dbo].[MetadataTypes] (
[typeName] VARCHAR (50) NOT NULL,
[dataType] VARCHAR (50) NOT NULL,
[typeRegex] VARCHAR (255) NULL
);
可能有諸如
"StartTime","System.DateTime",null
"TicketId","System.String","$[Ff][0-9]{7}^"
數據和輸入我的功能將沿着
myInput = new KeyValuePair<string,string>("StartTime","31/12/2010 12:00");
我需要檢查KeyValuePair的值是正確的線KeyValuePair數據類型期望的MetaDataType。
編輯答案:
萊昂得到了真正接近我終於想出瞭解決方案。
僅供參考我的函數現在看起來是這樣的:
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;
}
哪些類型的數據你在期待什麼?你需要處理哪些? – dlev
這不是一個鑄造,它更像是一個轉換 –
ok,Int32只是一個我可能試圖驗證的類型的例子。它可以是日期時間,布爾,小數等。 – Nick