5 c# performance interface object operators
我对 C# 有点陌生,我想知道您是否可以帮助我。
场景:
public bool ObjectImplementsSpecificInterface (object obj)
{
// 1.
if (obj is IExampleInterface)
{
return true;
}
// 2.
var tmp = obj as IExampleInterface;
if (tmp != null)
{
return true;
}
// 3.
if (typeof(IExampleInterface).IsAssignableFrom (obj.GetType ()))
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
目标:确定对象 o 是否实现给定的接口定义IExampleInterface。
问题:
“Is”运算符允许您检查特定实例是否属于特定类型或继承此类型,而 IsAssignableFrom 允许您检查一个类型是否可转换为另一个类型。
因此,如果您遇到必须评估某个对象是否属于特定类型的情况,那么您可以使用:
Random r = new Random();
if (r is Random)
{
reutrn true;
}
Run Code Online (Sandbox Code Playgroud)
但如果你只有这样的方法:
public bool CheckIfTypeIsRandom(Type typeKnownAtRuntime)
{
if (typeof(Random).IsAssignableFrom(typeKnownAtRuntime)
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
那么你必须使用IsAssignableFrom。
所有三种方法都会提供相同的结果,并且花费大致相同的时间,但只有第一种方法是专门针对您的情况而设计的。
当您从一个对象开始时,您所需要的只是知道它的类是否实现给定的接口,第一种方法(即运算符is)是最合适的。
第二种方法适用于需要查明对象是否是接口的实现,并在将其转换为接口后使用该对象的情况。如果您打算在检查后丢弃转换结果null,那么首先执行转换就没有意义。
System.Type当您有一个对象而不是对象本身时,第三种方法主要与反射一起使用。
is。如果您想要一个被强制转换为接口的新变量,请使用as。is确定对象是否派生自类型并返回布尔值。 as尝试将对象强制转换为该类型,并返回强制转换为该类型的新变量,如果不能,则返回 null。(但你从你的问题中知道这一点)。as即使演员阵容有效,也可能需要更长的时间。| 归档时间: |
|
| 查看次数: |
1937 次 |
| 最近记录: |