В настоящее время используются методы LINQ .First()
и .Skip()
, которые легко воссоздать, если вам нужно использовать это на .Net 2.0
//even cooler as an extension method
static IEnumerable<string> ReadAsLines(string filename)
{
using (var reader = new StreamReader(filename))
while (!reader.EndOfStream)
yield return reader.ReadLine();
}
static void Main()
{
var filename = "tabfile.txt";
var reader = ReadAsLines(filename);
var data = new DataTable();
//this assume the first record is filled with the column names
var headers = reader.First().Split('\t');
foreach (var header in headers)
data.Columns.Add(header);
var records = reader.Skip(1);
foreach (var record in records)
data.Rows.Add(record.Split('\t'));
}
Да, ваши определения верны, для первых 3:)
Хотя, если вам не нужно замыкание, оператор будет выполняться немедленно, нет причин оборачивать его, как # 1 (там конечно, достаточно много раз, когда вам нужно закрытие, просто обратите внимание, если вы этого не сделаете ... это излишне).
Номер 4 неверен, (function ($) {}) (jQuery);
не привязан к какому-либо событию, это просто закрытие, так что $ === jQuery
внутри него, поэтому вы можете использовать ярлык $
:
(function($) {
//You may use $ here instead of jQuery and it'll work...even if $ means
//something else outside of this closure, another library shortcut for example
})(jQuery);
Вот #4, который вы искали:
jQuery(function ($) {
});
Он будет выполняться на document.ready, в пространстве имен и с jQuery, определенным как $.
.