Dart:如何检查变量类型是否为字符串

Dart:如何检查变量类型是否为字符串,dart,Dart,我有这个密码。该类是泛型的,当我通过传递字符串类型实例化它时。变量变为字符串类型。但是声明 if(_val is String){ } 似乎不是真的。知道为什么吗 这是完整的代码: class foo<T>{ T _val; QVar() { //Read the value from preferences if(_val is String){ ... //Does not come i

我有这个密码。该类是泛型的,当我通过传递字符串类型实例化它时。变量变为字符串类型。但是声明

if(_val is String){
}
似乎不是真的。知道为什么吗

这是完整的代码:

    class foo<T>{
    T _val;
    QVar()
    {
         //Read the value from preferences
         if(_val is String){
            ... //Does not come in here!!
         }
    }
  }

 a   = new foo<String>();
class-foo{
T_val;
QVar()
{
//从首选项中读取值
如果(_val是字符串){
…//不要到这里来!!
}
}
}
a=新的foo();
而不是

if(T is String)
应该是

if(_val is String)
is
运算符在运行时用作对标识符(变量)进行操作的类型保护。在这些情况下,编译器在很大程度上会告诉您一些类似于
T引用类型但用作值的信息

请注意,由于您有一个类型保护(即
if(\u val是String)
),编译器已经知道
\u val
的类型只能是
if
-块中的
String


如果需要显式强制转换,您可以查看Dart中的
as
操作符。

使用
.runtimeType
获取类型:

void main() {

var data_types = ["string", 123, 12.031, [], {} ];`
  
for(var i=0; i<data_types.length; i++){

    print(data_types[i].runtimeType);

    if (data_types[i].runtimeType == String){
      print("-it's a String");

    }else if (data_types[i].runtimeType == int){
      print("-it's a Int");
      
    }else if (data_types[i].runtimeType == [].runtimeType){
      print("-it's a List/Array");

    }else if (data_types[i].runtimeType == {}.runtimeType){
      print("-it's a Map/Object/Dict");

    }else {
      print("\n>> See this type is not their .\n");
    } 
}}
void main(){
变量数据类型=[“字符串”,123,12.031,[],{}]`

对于(var i=0;iYou可能应该执行
if(\u val是String)
而不是
if(T是String)
。大多数编译器都会提供一些警告/错误信息,比如读取
T是一个类型,但被用作值
。此后,编译器将推断
\u val
的类型为
字符串
,仅在
if
块中。谢谢你指出这一点。还有,我可以如何做显式ca吗st-in-dart?不知道如何使用。在这种情况下,将
转换为
操作符。我执行了'if(_val是String)`但是看起来它没有进入条件语句。我更新了我的代码这是因为
\u val
从未初始化过。请记住
字符串
是引用类型,如果没有初始化,则将为
null
。这意味着
null
是一种特殊类型,而您的
if
-语句将为false。请尝试初始化alising
\u val
。看看这个啊,好吧。让我试着初始化它。这就是我想挑剔的:编译器不会在这里将
\u val
升级为
字符串,因为
\u val
不是局部变量。