我以前做了很多次,但是我的记忆让我失望,我觉得这有点愚蠢。
如何比较两种运行时类型?我假设System.Type不会覆盖==运算符,因此运算符执行引用相等性检查。
我想做一个价值平等。像:
someObject.GetType() == GetTypeFromSomeAssemblyUsingReflection(
"Namespace.TypeName",
objAssemblyToGetTheTypeFrom);
我可以使用IsAssignableFrom()
,但这不会是我想要做的准确,因为它会扩大范围。我想把这些类型等同于我所做的:
if obj is Cat // where Cat is the name of a class
或
if ( (obj as Cat) != null )
答案 0 :(得分:6)
==
运算符应该执行类型相等检查的技巧。例如,这传递:
[Test]
public void TypeEquality()
{
var monkey = new Monkey();
var areEqual = (monkey.GetType() == typeof(Monkey));
Assert.That(areEqual, Is.True);
}
答案 1 :(得分:4)
键入does override the equality operator,如文档中所示。
答案 2 :(得分:1)
如果您想要obj is Cat
行为,IsAssignableFrom
确实有效:
obj is Cat
相当于:
typeof(Cat).IsAssignableFrom(obj.GetType())
例如:
object siamese = new SiameseCat();
bool a = siamese is Cat;
// this is functionaly equivalent.
bool b = typeof(Cat).IsAssignableFrom(siamese.GetType());
答案 3 :(得分:0)
if ( obj1.GetType().FullName == obj2.GetType().FullName )
如果需要动态地从程序集创建对象,请使用以下方法:
public object createObjectFromAsm( string asm, string type )
{
// get the domain
AppDomain ad = AppDomain.CurrentDomain;
// create the object handle from the assembly
System.Runtime.Remoting.ObjectHandle sVal = ad.CreateInstanceFrom( asm, type );
// unwrap the object
return sVal.Unwrap();
}