class MyClass { public int MyProperty { get; set; } } static void Main() { // 例として、こんな配列があったとします var mc1 = new MyClass { MyProperty = 3 }; var mc2 = new MyClass { MyProperty = 3 }; var array = new[] { mc1, mc2 }; // Distinctは重複を取り除く。でも結果として、これは、2です。 var result = array.Distinct().Count(); // 参照の比較なので当然です。では、MyPropertyの値で比較したかったら? // DistinctにはIEqualityComparerインスタンスを受け付けるオーバーロードもあります // しかしIEqualit
ここ数日Twitterで見た/出したLinqネタまとめ。私の広くない観測範囲(@neuecc)での話ですが。 SelectManyとクエリ構文でUsing ネタ元、コード元はCode, code and more code.: SelectMany; combining IDisposable and LINQから。 static void Main(string[] args) { var firstLines = from path in new[] { "foo.txt", "bar.txt" } from stream in File.OpenRead(path) from reader in new StreamReader(stream) select path + "\t" + reader.ReadLine(); } public static IEnumerable<TR
あると便利ですよね、ということで書いてみた。 よくあるコーディングパターンには yield とか使ってないです。 こっちの方がよくありそうでしょ? Select 全ての要素に何らかの処理を行いたいときに使用します。 // よくあるコーディングパターンその1 // 全ての要素を2倍するメソッド public IEnumerable<int> DoubleAll(int[] target) { var result = new int[target.Length]; for (int i = 0; i < target.Length; i++) { result[i] = target[i] * 2; } return result; } // Selectで書き直し public IEnumerable<int> DoubleAll(IEnumerable<int> target) { re
プログラミングC# 第6版 8.3.9 要素を全て使用して単一の値を返すための演算子です。例えば要素数を返すCount演算子や、全ての要素の合計値を計算するSumなどがそれにあたります。 using System; using System.Linq; class Program { static void Main() { int[] nums = new int[] {2,4,6,8}; Console.WriteLine("要素数:{0}", nums.Count() ); Console.WriteLine("合計値:{0}", nums.Sum() ); } } $ main 要素数:4 合計値:20お次はタイトルにもあるようにAggregate演算子についてです。 これは汎用の演算子になっていてこの演算子を使えば全ての集約用演算子の処理を書くことが出来ます。 例として先程のCo
昨日の記事を書き上げた後、forの二重ループをどうするか考えていたところ、以下の記事を目にしました。 StringとStringBuilderと、in C# - 亀岡的プログラマ日記 その中でループはLINQにするという記載があり、LINQのコードをメモ的に残していなかったこともあり、forの二重ループをLINQで書きなおしてみました(合わせて、string.Format()部分も修正)。 ■元々のソース var contents = new List<string>(); for (int row = 1; row < 10000; row++) { var startNo = GetCellValue(row, START_COLUMN); var lastNo = GetCellValue(row, LAST_COLUMN); if (startNo == 0 && lastNo =
あらすじ あなたはとある業務用アプリケーションの開発・保守を任されています。 このアプリケーションはC#で記述されており、 とある企業におけるプロジェクト(Project)の管理を主目的としています。 プロジェクトには何名かの社員がアサインされており(AssignedStaffs)、 プロジェクト内には必ずマネージャーが1名存在します(ManagerStaffId)。 大まかなイメージとしては以下のようなコードになっています: public class Staff { public String Id {get; set;} public String Name {get; set;} ... } public class Project { public ArrayList AssignedStaffs {get; set;} public String ManagerStaffId {
問題 美しいプログラムを書く(脱添字職人編) では添字が多用され読み難くなっているソースコードのリファクタリングを通して 美しいプログラムを書くためのポイントをいくつか紹介しました。 そこでは 「何をするか」を基準にプログラムを書きましょう。 「どうやるか」が前面に出たプログラムは意図を把握し難くなります。添字や明示的なループの使用は避けましょう。「どうやるか」が前面に出てきてしまいます。 今時のプログラミング言語ならば便利な構文やライブラリ関数があるので、 添字やループを使わずとも「何をするか」を基準にプログラムが書き易くなっています。 ということを述べました。 確かにごもっともな主張ではありますが、経験値の少ない人からすれば 「そんなことを言われてもどんなライブラリ関数があってどういう場面で使えるのかリファレンスを読んでもよく分からないし……」 ということはよくあります。 という訳で、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く