在检查变量的类型时,我遇到了一些问题。
示例T
是List<MyClass>
T is List<MyClass>
//return false
T is List
//return false
最后,我必须使用一些愚蠢的方法才能获得正确的答案
T.toString() == "List<MyClass>"
//return true
有什么标准的方法可以处理它,或者我需要坚持愚蠢的方法直到正式发布?
答案 0 :(得分:1)
我之前犯了“ T is SomeClass”错误。 T是一个类,因此“ is”将无法使用。 在元素上,您应该使用T == MyClass。 在列表上,您应该实例化一个不太可爱的List,例如List()为T。是的List == T无法正常工作,而List()== T也是如此。 不幸的是,到目前为止,我还没有找到更好的解决方案。希望它能起作用。
答案 1 :(得分:0)
import 'package:type_helper/type_helper.dart';
void main() {
var list1 = [0];
func(list1);
var list2 = [MyClass<Map<String, int>>()];
func(list2);
var list3 = ['Hello'];
func(list3);
}
void func<T>(T object) {
if (isTypeOf<T, List<int>>()) {
print('T is subtype of List<int>');
} else if (isTypeOf<T, List<MyClass>>()) {
print('T is subtype of List<MyClass>');
if (isTypeOf<T, List<MyClass<Map<String, int>>>>()) {
print('O, yes, T is subtype of List<MyClass<Map<String, int>>>>');
}
} else {
print('Oh, no. T is not a subtype of valid type');
}
}
class MyClass<Elem> {
MyClass() {
if (isTypeOf<Elem, Map<String, int>>()) {
print('Elem is subtype of Map<String, int>');
}
}
}
结果:
T is subtype of List<int>
Elem is subtype of Map<String, int>
T is subtype of List<MyClass>
O, yes, T is subtype of List<MyClass<Map<String, int>>>>
Oh, no. T is not a subtype of valid type