我见过很多人使用以下代码:
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Run Code Online (Sandbox Code Playgroud)
但我知道你也可以这样做:
if (obj1.GetType() == typeof(int))
// Some code here
Run Code Online (Sandbox Code Playgroud)
或这个:
if (obj1 is int)
// Some code here
Run Code Online (Sandbox Code Playgroud)
就个人而言,我觉得最后一个是最干净的,但有什么我想念的吗?哪一个最好用,还是个人喜好?
为什么会这样
if (mycontrol.GetType() == typeof(TextBox))
{}
Run Code Online (Sandbox Code Playgroud)
这不是吗?
Type tp = typeof(mycontrol);
Run Code Online (Sandbox Code Playgroud)
但这很有效
Type tp = mycontrol.GetType();
Run Code Online (Sandbox Code Playgroud)
我自己使用is运算符来检查类型,但是当我使用typeof()和时,我的理解失败了GetType()
何时何地使用GetType()或typeof()?
根据stackoverflow的这个答案,C#中的泛型类型在运行时被解析.
但是,根据这个答案,在C#中,泛型类型在编译时被解析.
我在这里错过了什么?
换句话说,是T在编译时还是运行时解析了类型?
更新:
基于Oded的答案,在这种情况下,类型是封闭的具体类型(这意味着它将在编译时解析)
class Program
{
static void Main()
{
var t = new Test<int>();
}
}
public class Test<T>
{
}
Run Code Online (Sandbox Code Playgroud)
将MSIL具有相当于
class Program
{
static void Main()
{
var t = new Test();
}
}
public class Test<int>
{
}
Run Code Online (Sandbox Code Playgroud)