【问题标题】:Does t.GetType() return the same Type instance?t.GetType() 返回相同的 Type 实例吗?
【发布时间】:2014-03-25 12:59:49
【问题描述】:

我正在考虑在我的对象中存储一个Type 变量。但是,它们可以有很多,但不同类型的数量并没有那么大。我担心使用大量内存将Type 存储在所有这些对象中,因为其中许多对象的类型可能相同。

每次我查找某事物的类型时,是否都会创建一个新的Type 实例,使用t.GetType()typeof(T)?还是实际上是一样的?如果是一样的,我就不用担心内存了。

请注意,我已经考虑过泛型,在这种情况下它不是替代方案。

【问题讨论】:

    标签: c# types


    【解决方案1】:

    MSDN: Object.GetType Method

    对于两个具有相同运行时类型的对象 x 和 y,Object.ReferenceEquals(x.GetType(),y.GetType()) 返回 true。

    所以,是的。

    【讨论】:

    【解决方案2】:

    每种类型只有一个实例。如果你评估:

    "hello".GetType() == typeof(String)
    

    Object.ReferenceEquals("hello".GetType(), typeof(String))
    

    您将获得值true

    这也适用于泛型:

    Dictionary<string, string> dict = new Dictionary<string, string>();
    // same will have the value true
    bool same = Object.ReferenceEquals(dict.GetType(), typeof(Dictionary<string, string>));
    

    【讨论】:

    • CodeCaster 的回答在这里更贴切。
    • 这并不意味着它们是同一个对象,相等运算符可以被重载。例如,相等运算符将为包含相同字符串的两个不同字符串实例返回 true。
    • @YvesDubois @DStanley object.ReferenceEquals 证明了这一点。
    • @KendallFrey 确实如此!但是,当我发表评论时,没有提到object.ReferenceEquals。另外,我关于相等运算符的观点仍然成立;这不是一个正确的证明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多