Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取用户输入值的数据类型_C# - Fatal编程技术网

C# 如何获取用户输入值的数据类型

C# 如何获取用户输入值的数据类型,c#,C#,例如:TableName.ColumnName==Value 我有columnName的数据类型,但值是由用户输入的, 可以是int/string/datetime或任何值 我需要检查columnName和value的数据类型。代码应该适用于两个窗口 和web应用程序除非用户告诉您数据类型是什么,否则您只能通过尝试将其解析为不同的类型来确定数据类型,即使这样,也不能保证正确获取数据 使用在BCL中的int、double、DateTime和其他类型上定义的不同TryParse方法,您可以查看传入的

例如:
TableName.ColumnName==Value

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

我需要检查columnName和value的数据类型。代码应该适用于两个窗口
和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的方法,否则别无选择。据我所知,用户总是输入字符串。
我可能会用正则表达式???如果您非常清楚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";

        }

每当用户在文本框中键入值时,它总是一个字符串。@oded..由于Text属性,用户输入的值确实是作为字符串获取的。我只是想进行客户端验证,以提醒用户为筛选条件传递了错误的值。将尝试解析到列类型。@psobhan-您可以查看以帮助解决此问题。@Tengiz也许我可以使用正则表达式来避免spl字符。事实上,如果大小写与这3:int/string/datetime完全相关,那么使用正则表达式会更轻松。至少他们在内容上有明显的不同。什么是spl字符?@Jason将尝试根据列类型分析该值。@由于该值是从文本框中获取的,所以数据类型始终为字符串。@cpedros-I并不是说columnName具有特定类型。Itz建议我可以获取用户选择的列的数据类型(基于列名)。用户选择类型为“int”的列并尝试使用字符串值检查它是错误的。但是需要一个简单的方法来避免异常,方法是阻止它从第一阶段开始。