2014-10-16 68 views
0

如何在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或其他什么东西?

+0

'Object.GetType' ?!但目前还不清楚,用户只能输入字符串。所以类型总是字符串。如果将它解析为数字类型,则在编译时已知该类型。 – 2014-10-16 13:07:36

+3

只是一个侧面说明,'字符串不是一个值类型 – Habib 2014-10-16 13:08:14

+2

我没有看到*为什么*你需要在这里。如果你有一个'Object',这会很有用,但是从控制台读取的字符串是一个字符串,除非你解析它,否则解析结果是一个已知的类型。 – crashmstr 2014-10-16 13:08:45

回答

2

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

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

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

0

GetType将返回正确的结果:

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

但是在这种情况下,你不需要类型转换为字符串的比较:

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