首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Assembly.GetAssembly(类型) vs type.Assembly

Assembly.GetAssembly(类型) vs type.Assembly
EN

Stack Overflow用户
提问于 2012-06-29 22:53:30
回答 2查看 1.7K关注 0票数 3

我想知道调用这两个方法中的任何一个有什么好处,为什么?

它们在功能上是否相同,或者我应该总是选择一个而不是另一个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-29 22:57:59

它们在功能上是等效的,但是Assembly.GetAssembly(类型)在核心-clr (Silverlight等)中不可用

根据您的Type是否为空,您将得到不同的错误。Type.Assembly会抛出一个NullReferenceException (自然地),而Assembly.GetAssembly(Type)会抛出一个ArgumentNullException。根据您的代码,您可能更喜欢其中之一。

编辑:查看源代码,对于Assembly.GetAssembly

代码语言:javascript
复制
public static Assembly GetAssembly(Type type)
{
    if (type == null)
        throw new ArgumentNullException("type");
    Contract.EndContractBlock();

    Module m = type.Module;
    if (m == null)
        return null;
    else
        return m.Assembly;
}

System.Type.Assembly

代码语言:javascript
复制
public abstract Assembly Assembly {
    get;
}

如果我没记错的话,运行时类型的System.Type是它们自己的子类(或类似的子类),所以我猜每个子类都可能被覆盖,并直接返回一个程序集引用。除此之外,我认为除了由您自己决定的null处理之外,对于您的代码来说,没有什么重要的区别。(或者,如果您运行的是Core-CLR,在这种情况下,您无论如何都没有Assembly.GetAssembly,所以必须使用Type.Assembly)

票数 2
EN

Stack Overflow用户

发布于 2012-06-29 22:58:09

来自the documentation for Type.Assembly

如果当前Type对象表示构造的泛型类型,则此属性返回包含该泛型类型定义的程序集。

例如,假设您创建了一个包含泛型类型定义MyGenericStack<T>的名为MyGenerics.dll的程序集。如果在另一个程序集中创建MyGenericStack<int>的实例,则构造类型的assembly属性将返回表示MyGenerics.dll的Assembly对象

来自Assembly.GetAssembly的文档

若要调用此方法,必须具有Type对象,这意味着必须已加载在其中定义类的程序集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11264060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档