【问题标题】:How to determine Type of value types [duplicate]如何确定值类型的类型 [重复]
【发布时间】:2014-12-11 20:50:15
【问题描述】:

如何在 C# 中找到值类型的Type

假设我有:

string str;
int value;
double doubleValue;

有没有返回这些值类型的类型的方法?

为了更清楚,我正在尝试这样的事情:

string str = "Hello";
string typeOfValue = <call to method that returns the type of the variable `str`>

if (typeOfValue == "string") {
    //do something
 } else {
   //raise exception
 }

如果输入的值不是stringintdouble,我想从用户那里获取输入并引发异常,具体取决于我的条件。

我试过了:

public class Test
{
    public static void Main(string[] args)
    {
        int num;
        string value;
        Console.WriteLine("Enter a value");

        value  = Console.ReadLine();
        bool isNum = Int32.TryParse(value, out num);

        if (isNum)
        {
            Console.WriteLine("Correct value entered.");

        }
        else
        {
            Console.WriteLine("Wrong value entered.");

        }
        Console.ReadKey();
    }
}

但是,如果我要检查的值类型是 string 或其他值怎么办?

【问题讨论】:

  • Object.GetType?!但不清楚,用户只能输入字符串。所以类型总是字符串。如果将其解析为数字类型,则您在编译时就已经知道该类型。
  • 补充说明,string 不是值类型
  • 我没有看到为什么你需要这个。如果你有一个Object,这可能很有用,但是从控制台读取的字符串是一个字符串,除非你解析它,否则解析结果是一个已知类型。

标签: c#


【解决方案1】:

GetType 会返回正确的结果:

string typeOfValue = value.GetType().ToString();

但在这种情况下,您不需要将类型转换为字符串进行比较:

if (typeof(String) == value.GetType()) ...

【讨论】:

    【解决方案2】:

    您可以在 .Net 中的任何元素上使用GetType,因为它存在于对象级别:

    var myStringType = "string".GetType();
    myStringType == typeof(string) // true
    

    GetType 返回一个Type 对象,您可以通过使用Type 上的Name 属性来获取可读的人类友好名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      相关资源
      最近更新 更多