class Program
{
private static string logfile = @"c:\temp\log.txt";
public static void Main(string[] args)
{
File.WriteAllText(logfile, "Start\n");
SomeClass some = new SomeClass("Hello World!");
some = null;
GC.Collect();
GC.WaitForPendingFinalizers();
File.AppendAllText(logfile, "Done\n");
}
}
class SomeClass
{
private static string logfile = @"c:\temp\log.txt";
public string SomeString { get; set; }
public SomeClass(string s) { SomeString = s; }
~SomeClass()
{
File.AppendAllText(logfile, "Finalize\n");
}
}
错误:
由于其类型,参数“ bar”的值不能为“ null”,并且不提供非null的默认值。
我正在用void main() {
foo(bar: 1);
}
void foo({@required int bar}) {} // Error
注释bar
,并且它也是不可为空的。这意味着我将总是必须提供@required
一个非空值。那么,为什么编译器要求我提供默认值?
答案 0 :(得分:1)
@required
是来自meta
包的旧注释标记,被引入作为从分析仪发出警告的一种方式。使用NNBD,已将其更改为名为required
的关键字。您可以在以下链接中了解有关此关键字的更多信息:
https://dart.dev/null-safety/understanding-null-safety#required-named-parameters