这是我在做什么:
object ReturnMatch(System.Type type)
{
foreach(object obj in myObjects)
{
if (obj == type)
{
return obj;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果 obj 是 的子类type,它将不匹配。但我希望函数以与使用 operator 相同的方式返回is。
我尝试了以下操作,但无法编译:
if (obj is type) // won't compile in C# 2.0
Run Code Online (Sandbox Code Playgroud)
我想出的最佳解决方案是:
if (obj.GetType().Equals(type) || obj.GetType().IsSubclassOf(type))
Run Code Online (Sandbox Code Playgroud)
没有办法使用运算符is使代码更干净吗?
遇到这个问题时,我使用了 IsAssignableFrom 方法。
Type theTypeWeWant; // From argument or whatever
foreach (object o in myCollection)
{
if (theTypeWeWant.IsAssignableFrom(o.GetType))
return o;
}
Run Code Online (Sandbox Code Playgroud)
另一种可能或可能不适用于您的问题的方法是使用通用方法:
private T FindObjectOfType<T>() where T: class
{
foreach(object o in myCollection)
{
if (o is T)
return (T) o;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
(代码是凭记忆写的,未经测试)
| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |