如何只获取 Enumerable 类型?
how to get only the type of Enumerable?
我想按类型分隔 IEnumerable
个变量。我的代码是这样的:
if (type is IEnumerable)
{
var listGenericType = type.GetType().GetGenericTypeDefinition().Name;
listGenericType = listGenericType.Substring(0, listGenericType.IndexOf('`'));
if (listGenericType == "List") {
//do something
}
else if (listGenericType == "HashSet") {
//do something
}
}
当我使用 type.GetType().GetGenericTypeDefinition().Name
时,listGenericType
就像 List`1
或 HashSet`1
,但我希望它像 List
或 HashSet
。因此,我使用Substring
来处理这个问题!
有没有不用 postProcessing string
类型来处理这个问题的方法?我的意思是像下面的代码:
if (type is IEnumerable)
{
var listGenericType = type.GetType().GetGenericTypeDefinitionWithoutAnyNeedForPostProcessing();
if (listGenericType == "List") {
//do something
}
else if (listGenericType == "HashSet") {
//do something
}
}
您不必将它与字符串进行比较。由于 GetGenericTypeDefinition()
returns 一个 type,您所要做的就是使用 typeof
运算符将其与类型进行比较,例如:
if (type is IEnumerable)
{
var listGenericType = type.GetType().GetGenericTypeDefinition();
if (listGenericType == typeof(List<>)) {
//do something
}
else if (listGenericType == typeof(HashShet<>)) {
//do something
}
}
正如@nopeflow 在下面亲切指出的那样,如果您的类型不是泛型类型,那么 GetGenericTypeDefinition()
将抛出一个 InvalidOperationException
。确保你考虑到这一点。
假设您只是在寻找通用类型,我相信这可能会对您有所帮助。
List<int> someObject = new List<int>();
Type currentType = someObject.GetType();
if (currentType.IsGenericType)
{
if (currentType.GetGenericTypeDefinition() == typeof(List<>))
{
// Do something
}
else if (currentType.GetGenericTypeDefinition() == typeof(HashSet<>))
{
// Do something else
}
}
我想按类型分隔 IEnumerable
个变量。我的代码是这样的:
if (type is IEnumerable)
{
var listGenericType = type.GetType().GetGenericTypeDefinition().Name;
listGenericType = listGenericType.Substring(0, listGenericType.IndexOf('`'));
if (listGenericType == "List") {
//do something
}
else if (listGenericType == "HashSet") {
//do something
}
}
当我使用 type.GetType().GetGenericTypeDefinition().Name
时,listGenericType
就像 List`1
或 HashSet`1
,但我希望它像 List
或 HashSet
。因此,我使用Substring
来处理这个问题!
有没有不用 postProcessing string
类型来处理这个问题的方法?我的意思是像下面的代码:
if (type is IEnumerable)
{
var listGenericType = type.GetType().GetGenericTypeDefinitionWithoutAnyNeedForPostProcessing();
if (listGenericType == "List") {
//do something
}
else if (listGenericType == "HashSet") {
//do something
}
}
您不必将它与字符串进行比较。由于 GetGenericTypeDefinition()
returns 一个 type,您所要做的就是使用 typeof
运算符将其与类型进行比较,例如:
if (type is IEnumerable)
{
var listGenericType = type.GetType().GetGenericTypeDefinition();
if (listGenericType == typeof(List<>)) {
//do something
}
else if (listGenericType == typeof(HashShet<>)) {
//do something
}
}
正如@nopeflow 在下面亲切指出的那样,如果您的类型不是泛型类型,那么 GetGenericTypeDefinition()
将抛出一个 InvalidOperationException
。确保你考虑到这一点。
假设您只是在寻找通用类型,我相信这可能会对您有所帮助。
List<int> someObject = new List<int>();
Type currentType = someObject.GetType();
if (currentType.IsGenericType)
{
if (currentType.GetGenericTypeDefinition() == typeof(List<>))
{
// Do something
}
else if (currentType.GetGenericTypeDefinition() == typeof(HashSet<>))
{
// Do something else
}
}