[英]How to get the datatype of value entered by User
例如: TableName.ColumnName==Value
。
我有columnName
的數據類型,但用戶輸入的值可以是int / string / datetime或任何值。
我需要檢查columnName和value的數據類型。代碼應該適用於Windows和Web應用程序
除非用戶告訴您數據類型是什么,否則您只能通過嘗試將其解析為不同類型來確定它,即使這樣您也無法保證正確。
使用在BCL中的int
, double
, DateTime
和其他類型上定義的不同TryParse
方法,您可以查看傳入的字符串是否可解析為其中一種或多種類型。
此時,您需要確定要使用的類型...由於您已經知道列的數據類型,因此可以測試是否可以解析為該類型,如果不是,則拒絕輸入。
在所有情況下,該值都是有效的字符串(由用戶輸入),因為這是所有控件的Text
屬性的類型。
if ( Value is string)
//code to handle
else if (value is int)
//code to handle
等等
除非你想出如何識別輸入值的方式是int,string或datetime,否則沒有其他辦法。 據我所知,用戶總是輸入字符串。 我會使用RegEx也許??? 如果你很清楚date-times / int / string是如何彼此不同的。
你的問題不是很清楚,但我猜你在談論將變量轉換為特定類型。
在你的情況下,說TableName.ColumnName是一個整數,你會做這樣的事情:
string valueByUser = "23"; // Wherever this comes from.
int number = 0;
int.TryParse(valueByUser, out number);
TableName.ColumnName = number;
由於您將知道ColumnName的數據類型是什么,因此您可以使用適當的TryParse來轉換值,例如
decimal.TryParse()
DateTime.TryParse()
通過對用戶如何將價值輸入該領域做出更好的設計決策,而不是給出如何解決手頭的具體問題的答案,似乎可以完全避免。
你說columName
有一個特定的數據類型,但你允許用戶在表示層輸入任何值? 這似乎有代碼味道。
你能否在UI層強制執行某種形式的驗證? 我想不出任何允許用戶在符合特定數據類型的字段中輸入任何值的實例。 我將根據所選的columnName
類型驗證輸入。
這是我使用的:
private string ParseString(string str)
{
bool boolValue;
Int32 intValue;
Int64 bigintValue;
decimal doubleValue;
DateTime dateValue;
// Place checks higher in if-else statement to give higher priority to type.
if (bool.TryParse(str, out boolValue))
return "System_Boolean";
else if (Int32.TryParse(str, out intValue))
return "System_Int32";
else if (Int64.TryParse(str, out bigintValue))
return "System_Int64";
else if (decimal.TryParse(str, out doubleValue))
return "System_Decimal";
else if (DateTime.TryParse(str, out dateValue))
return "System_DateTime";
else return "System_String";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.