例外処理

C#

プログラミングC# 第6版 6.3.1 C#における例外処理のお話。C++にもありましたね。まずは基本の実装例です。 using System; class Program { static void Main() { try { Foo(); } catch(Exception e) { Console.WriteLine("catch実行:"+e); } finally { Con…

0除算の結果定数

C#

プログラミングC# 第6版 飛ばしていた例外の章について見ていきます。double型の0で0除算をすると以下のような出力が得られます。 using System; class Program { static void Main() { double i = 0.0; Console.WriteLine(0.0/i); Console.WriteLine(1.0/i)…

集約用Aggregate演算子

プログラミングC# 第6版 8.3.9 要素を全て使用して単一の値を返すための演算子です。例えば要素数を返すCount演算子や、全ての要素の合計値を計算するSumなどがそれにあたります。 using System; using System.Linq; class Program { static void Main() { i…

AnyやAllメソッドによる要素のチェック

プログラミングC# 第6版 8.3.8 Anyメソッドを使うことで、ある条件に合う要素が一つでも存在しているかどうかのチェックを行うことができます。 using System; using System.Linq; class Program { static void Main() { int[] nums1 = new int[] {1,3,5,7};…

全体から一部を取り出す

プログラミングC# 第6版 8.3.7 全部は必要なくて例えば先頭から3件だけ処理したいとかいう場合にTakeメソッドを使います。 using System; using System.Linq; class Program { static void Main() { int[] nums = new int[] {1,2,3,4,5,6,7}; // 先頭から3件…

Zipメソッドによるマージ処理

プログラミングC# 第6版 8.3.6 二つのデータを一つのデータにまとめます。Concatのように結合するのではなく、同じ要素で一まとめにするといった感じです。まぁ文章より実装を見た方が早いですね。 using System; using System.Linq; class Program { static…

Selectメソッドで添え字を得る

プログラミングC# 第6版 8.3.5.3 Selectメソッドを使い、反復処理中の添え字を得る。以下実装例 using System; using System.Linq; class Program { static void Main() { string[] strs = new string[] {"foo","bar","baz"}; // ラムダ式の第二引数に添え字…

複数のデータソースを使用する

プログラミングC# 第6版 8.3.5.2 複数のデータソースを処理する。fromをつなげて処理する感じですね。 using System; using System.Linq; class Program { static void Main() { int[][] nums = new int[][] { new int[]{1,2,3}, new int[]{10,20,30}, new i…

selectに匿名型を利用する

プログラミングC# 第6版 8.3.5 selectで取ってくるデータとして匿名型を利用する。匿名型は以前習いましたね。 using System; using System.Linq; class Program { static void Main() { int[] nums = new int[] { 1,2,3,4,5 }; // selectに匿名型を利用 var…

属性を自作する

C#

属性 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 属性は自作することもできるようです。 using System; using System.Reflection; [AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = fa…

デバッグ時のみ出力したり関数実行したりする

C#

前回の記事でConditional属性について学んだので早速デバッグ用の関数を作ってみました。 -- lib/debug.cs -- using System; using System.Diagnostics; namespace MyLib { public static class debug { // デバッグ改行出力関数 [Conditional("DEBUG")] pub…

Conditional属性

C#

属性 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 属性というものが出てきました。クラスやメソッド等に追加情報を与えることができる機能とのことです。「百聞は一実装にしかず」という諺もある通り、手を動かしてみましょう。色々な属性があ…

リフレクションを利用して文字列からクラス操作

C#

実行時型情報 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C リフレクションとはプログラム実行時にクラス等のメタデータを取り出したりなんかしたりできる機能みたいです。これだけだとなんのこっちゃわからないのですが、要するに文字列からイ…

インデクサー

C#

インデクサー - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 配列の[]をオーバーロードできる機能です。定義の仕方はプロパティと似ています。 using System; class Class { public int[] data = new int[10]; public int this[int i] { set { da…

演算子のオーバーロード

C#

演算子のオーバーロード - C# によるプログラミング入門 | ++C++; // 未確認飛行 C C++と同様にC#にも演算子のオーバーロードがあります。定義の仕方もまぁほぼ同じですね。 using System; class Class { public int i; public Class (int i) { this.i = i; …

オブジェクト初期化子はやっぱ便利

C#

以前、オブジェクト初期化子について勉強しましたが、その時は何が便利なのかいまいちわかりませんでした。しかしいくつかのプログラムを書いてる内に、なるほどこれは便利だと思うようになりました。 using System; class Class { public string Name; } cl…

outキーワードによる出力引数

C#

参照渡し - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 初期化して無い変数を関数等に渡そうとするとコンパイルエラーがでます。 using System; class CClass { public string str; } class Program { static void Foo(CClass cobj) { cobj = ne…

refキーワードによる参照渡し

C#

参照渡し - C# によるプログラミング入門 | ++C++; // 未確認飛行 C refキーワードを使えば値型でも参照で渡すことができます。 using System; class Program { // refキーワードを付ける static void Foo(ref int i) { i = 9999; } static void Main() { in…

ジェネリクス定義

C#

ジェネリック - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 今までも何度も出てきたあれですね。C++でいうテンプレートです。兎にも角にも定義してみましょう。 using System; // ジェネリクスクラス定義 class CClass<T> { public T member; } cla</t>…

拡張メソッド

C#

拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 静的メソッドをオブジェクトのメソッドと同じ形式で呼び出せるようにできるものらしいです。まずは普通に書いた場合の処理を見てみます。 using System; class CClass { public string…

partialキーワードでクラスの分割定義

C#

クラス - C# によるプログラミング入門 | ++C++; // 未確認飛行 C partialキーワードを使えばクラス定義を分割することができます。 using System; // partialでクラスの分割定義 partial class CClass { static public void Foo () { Console.WriteLine( "F…

名前空間のエイリアス

C#

名前空間 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C usingキーワードを使って名前空間のエイリアスを定義することができます。 // SystemのエイリアスとしてSを定義 using S = System; class Program { static void Main() { // S経由でアク…

匿名型

C#

型推論と匿名型 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 名前の無いクラスって感じですかね。 using System; class Program { static void Main() { var x = new { Foo = "foo", Bar = "bar" }; Console.WriteLine( x.Foo + x.Bar ); } } $…

オーバーフローのチェック

C#

オーバーフローのチェック - C# によるプログラミング入門 | ++C++; // 未確認飛行 C checkedキーワードを使えばオーバーフローが発生した場合に例外を投げることができます。 using System; class Program { static void Main() { byte b = 255; // バイト…

null合体演算子

C#

組込み演算子 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 対象の変数がnullだったら初期値を入れるという処理を書くための演算子です。三項演算子の特殊省略形のような感じですね。ということでまずは三項演算子を使った場合の処理を確認して…

変数宣言時の既定値

C#

組込み型 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C defaultを使うと、変数宣言時に初期化しなかった場合の既定値を明示的に取得することができます。 using System; class Program { static void Main() { // 以下二つは同じ意味になる int …

逐語的文字列リテラル(ヒアドキュメント)

C#

組込み型 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 文字列リテラルを定義する際に先頭に「@」を付けると、見たままの文字列として扱えます。つまりエスケープシーケンス等の解釈がされません。また複数行にまたがって文字列を定義できます。…

逐語的識別子

C#

変数と式 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 変数を宣言する時に変数名の先頭に「@」をつけるとC#のキーワード名と同名の変数でも宣言することが可能となります。例えばthisを変数名として使う場合、通常なら以下のエラーがでます。 u…

dynamicによる動的型付け変数

C#

変数と式 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C dynamic - C# によるプログラミング入門 | ++C++; // 未確認飛行 C これは凄い機能ですね。変数の型をコンパイル時ではなく実行時に決めるようにする変数です。 using System; class CClas…

varによる型推論

C#

変数と式 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 変数を宣言するときにvarを使うと、右辺値から判断して適切な型を設定してくれます。 using System; class CClass {} class Program { static void Main() { var i = 1; // int型 var d = …