相关疑难解决方法(0)

类型检查:typeof,GetType还是?

我见过很多人使用以下代码:

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)

就个人而言,我觉得最后一个是最干净的,但有什么我想念的吗?哪一个最好用,还是个人喜好?

c#

1435
推荐指数
8
解决办法
93万
查看次数

何时何地使用GetType()或typeof()?

为什么会这样

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()

.net c# types typeof gettype

60
推荐指数
4
解决办法
12万
查看次数

何时在c#中解析泛型类型?

根据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)

c# generics

14
推荐指数
2
解决办法
2197
查看次数

C#中的运行时类型与编译时类型

C#中的运行时类型和编译时类型之间有什么区别?虚拟方法调用有什么含义?

c#

7
推荐指数
1
解决办法
1913
查看次数

标签 统计

c# ×4

.net ×1

generics ×1

gettype ×1

typeof ×1

types ×1