typeof(T) 与 o.GetType()

typeof(T) versus o.GetType()

一个方法

public void Foo<T>(T o)
{
    var oType = o.GetType();
    var tType = typeof(T);
}

在选择使用哪一个(功能性或非功能性)时,我应该考虑什么?

来自 Jon 的回答。

我创建了一个 fiddle 来演示它:

https://dotnetfiddle.net/Y4bAGf

当然:您应该考虑是否希望结果类型匹配参数的静态类型或运行时类型。

在您的典型用例中,这可能是同一类型,但不能想当然。例如:

Foo<object>(string.Empty); // oType = string, tType = object

此外,在一般情况下你必须小心不要打电话 GetTypenull