Мне известно о этом вопросе, и о его последующих действиях, а также этом одном, но я не могу соединить их таким образом, который поможет мне сделатьчто я хочу сделать:
У меня есть универсальный тип, и я хочу проверить, что T является struct
ИЛИ если он реализует IEnumerable<T2>
, тогда я хотел бы проверить, что T2 является struct
.
До сих пор я здесь ('scusppy код, это экспериментально):
private class TestClass<T>
{
public TestClass()
{
Type type = typeof(T);
//(detecting T == IEnumerable<something> ommitted for clarity)
Type enumerableType = type.GetInterfaces()
.Where(t => t.IsGenericType)
.Select(t => t.GetGenericTypeDefinition())
.Where(t => t == typeof(IEnumerable<>))
.FirstOrDefault();
if(enumerableType != null)
{
Type enumeratedType = type.GetGenericArguments().First();
if(!enumeratedType.IsValueType) //throw etc...
}
}
}
У меня проблема в том, что enumerableType
это IEnumerable<>
, поэтому enumeratedType
выглядит как T
, а не как я (например, new TestClass<int[]>()
).