如何获取User输入的值的数据类型

时间:2011-03-17 16:23:50

标签: c#

例如:TableName.ColumnName==Value

我有columnName的数据类型,但该值是由用户输入的, 可以是int / string / datetime或任何值。

我需要检查columnName和value的数据类型。代码应该适用于两个窗口 和网络应用程序

6 个答案:

答案 0 :(得分:2)

除非用户告诉您数据类型是什么,否则您只能通过尝试将其解析为不同的类型来确定它,即使这样您也无法保证正确。

使用在TryParseintdouble和BCL中的其他类型上定义的不同DateTime方法,您可以查看传入的字符串是否可解析这些类型中的一种。

此时您需要确定要使用的类型...由于您已经知道该列的数据类型,因此您可以测试是否可以解析该类型,如果不知道,则拒绝输入。

在所有情况下,该值都是有效字符串(由用户输入),因为这是所有控件的Text属性的类型。

答案 1 :(得分:0)

if ( Value is string)
  //code to handle
else if (value is int)
//code to handle

答案 2 :(得分:0)

除非你想出如何识别输入的值是int,string或datetime,否则没有别的办法。据我所知,用户总是输入字符串。 我会使用RegEx也许???如果你很清楚date-times / int / string如何彼此不同。

答案 3 :(得分:0)

您的问题不是很明确,但我猜您正在讨论将变量转换为特定类型。

在你的情况下,比如说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()

答案 4 :(得分:0)

而不是就如何解决手头的具体问题给出答案,似乎可以通过对用户如何在该领域输入值进行更好的设计决策来完全避免。

你说columName有一个特定的数据类型,但是你允许用户在表示层中输入任何值?这似乎有代码味道。

您是否可以在UI层强制执行某种形式的验证。我想不出任何允许用户在符合特定数据类型的字段中输入任何值的实例。我会根据所选的columnName类型验证输入。

答案 5 :(得分:0)

这就是我使用的:

 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";

        }