我有一个名为FileFilter的类。它是一个非常基本的类,其目标是促进为文件浏览对话框创建文件过滤器。
Class FileFilter{
Public Name { get; }
Public Extension { get; }
Public FileFilter => String.Format(“{0}{1}|{1}”, Name, Extension);
}
我预计不需要经常访问"FileFilter"属性(仅在使用对话框时(,但我认为我可以使用该对象来存储其他函数的字符串,例如DirectoryInfoGetFiles((可以接受文件扩展名。
所以我创建了一个带有各种对象的静态小类,比如"TextFile*.txt">
从理论上讲,我的问题是,在对象构造过程中为FileFilter生成字符串更有效,还是使用lambda表达式更有效?
如果在一行中多次使用lambda表达式,是创建了新实例,还是缓存了它?
我认为它会在第一次使用时创建一个新字符串,存储它并在运行时重用它,因为它总是生成相同的字符串,但实际上并不知道。OTOH,从技术上讲,它是一个每次都运行的函数,所以它每次都可能创建一个新的字符串对象。
我读过关于弦乐实习的文章,所以我很好奇这是怎么回事。
首先,=>
在本例中不是lambda,它是只读属性的语法糖。这相当于
public string FileFilter
{
get
{
return String.Format("{0}{1}|{1}", Name, Extension);
}
}
如果在一行中多次使用lambda表达式,是创建新实例还是缓存它?
每次读取属性中的getter时都会对其求值。这意味着,如果多次调用FileFilter
,String.Format
将运行多次。在String.Format
中使用的两个值Name和Extension只能由构造函数设置。这意味着,一旦构造函数完成,FileFilter
将返回不同的字符串对象,但无论您读取该属性多少次,每个对象都将具有相同的值。
在设置Name和Extension之后,您可以计算并在构造函数中缓存此值,也可以让这些琐碎的代码保持原样。这取决于您。