All*_*est 61 .net c# arrays reflection types
这很好用:
var expectedType = typeof(string);
object value = "...";
if (value.GetType().IsAssignableFrom(expectedType))
{
...
}
Run Code Online (Sandbox Code Playgroud)
但我怎么检查是否值是不设置一个字符串数组expectedType来typeof(string[])?我想做的事情如下:
var expectedType = typeof(string);
object value = new[] {"...", "---"};
if (value.GetType().IsArrayOf(expectedType)) // <---
{
...
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
Ste*_*fan 108
使用Type.IsArray和Type.GetElementType()来检查数组的元素类型.
Type valueType = value.GetType();
if (valueType.IsArray && expectedType.IsAssignableFrom(valueType.GetElementType())
{
...
}
Run Code Online (Sandbox Code Playgroud)
注意Type.IsAssignableFrom().如果要检查完全匹配的类型,则应检查是否等于(typeA == typeB).如果要检查给定类型是类型本身还是子类(或接口),那么您应该使用Type.IsAssignableFrom():
typeof(BaseClass).IsAssignableFrom(typeof(ExpectedSubclass))
Run Code Online (Sandbox Code Playgroud)
Ali*_*tad 15
您可以使用扩展方法(不是必须的,但使其更具可读性):
public static class TypeExtensions
{
public static bool IsArrayOf<T>(this Type type)
{
return type == typeof (T[]);
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用:
Console.WriteLine(new string[0].GetType().IsArrayOf<string>());
Run Code Online (Sandbox Code Playgroud)
发现它的最新和最安全的方法是使用MakeArrayType:
var expectedType = typeof(string);
object value = new[] {"...", "---"};
if (value.GetType() == expectedType.MakeArrayType())
{
...
}
Run Code Online (Sandbox Code Playgroud)
value.GetType().GetElementType() == typeof(string)
Run Code Online (Sandbox Code Playgroud)
作为额外的奖励(但是我不确定100%。这是我使用的代码...)
var ienum = value.GetType().GetInterface("IEnumerable`1");
if (ienum != null) {
var baseTypeForIEnum = ienum.GetGenericArguments()[0]
}
Run Code Online (Sandbox Code Playgroud)
有了它,您可以查找List,IEnumerable ...并获取T。
| 归档时间: |
|
| 查看次数: |
79645 次 |
| 最近记录: |