C#动态解析用户输入为string,int,double,decimal,datetime,bool等


C# Dynamically parse user input to string, int, double, decimal, datetime, bool, etc

本问题已经有最佳答案,请猛点这里访问。

如何将用户输入的值动态解析为特定类型?

如果我有一个文本框,用户可以在其中输入他们想要的任何内容,我如何动态分析该值并返回适当的类型?

1
2
3
4
 public dynamic ParseValue(dynamic value)
 {
     return //TO DO
 }

如果用户输入以下值:

  • 2015年6月18日10:23:00//返回日期时间
  • 一些文本//返回字符串
  • 10.23//返回double/decimal
  • 真/真/假/假//返回bool not string
  • 10//返回int

是否正确使用type.typarse,并检查每种类型是否有效?当然,我必须首先检查它是bool,然后是string,否则如果值是true/True/false/False,将导致string而不是bool。


您不需要使用dynamic关键字。因为源值总是string

编写通用方法来解析string中的值是很好的。您可以使用TypeDescriptor类的TypeConverter方法来编写这种方法。

从这个答案

1
2
3
4
5
6
7
8
9
10
public static T Convert<T>(this string input)
{
    var converter = TypeDescriptor.GetConverter(typeof(T));
    if(converter != null)
    {
        //Cast ConvertFromString(string text) : object to (T)
        return (T)converter.ConvertFromString(input);
    }
    return default(T);
}


是的,imho您需要使用type.typarse并为类型优先级构建自己的逻辑

类胰蛋白酶

1
2
3
4
public dynamic ParseValue(string value)
 {
     return //TO DO
 }


虽然我不明白您为什么需要这样做,但以下可能有效:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   // since user will enter text value should be string
    public dynamic ParseValue(string value)
    {
        DateTime tempDateTime;
        if (DateTime.TryParse(value, out tempDateTime))
        {
            return tempDateTime;
        }

        int tempInt;
        if(int.TryParse(value, out tempInt))
        {
            return tempInt;
        }

        // also process other types like double etc. before falling back to string
        return value;
    }
}

但我怀疑这将是一个解决方案,因为您需要获得处理调用函数中返回值的确切类型。