メソッド名は引数が違えば同じ名前でもOK
usingSystem;namespaceClassSample{classProgram{staticvoidMain(string[]args){varscores=newint[]{55,70,43,79,17,31,48};vartotal=ArrayUtils.Total(scores);Console.WriteLine(total);varscores2=newdouble[]{5.8,6.2,5.9,2.1,6.6,9.5,3.8};vartotal2=ArrayUtils.Total(scores2);Console.WriteLine(total2);}staticclassArrayUtils{//①int型の配列の数値の合計を求めるpublicstaticintTotal(int[]numbers){vartotal=0;foreach(varninnumbers){total+=n;}returntotal;}// ②double型の配列内の数値の合計を求めるpublicstaticdoubleTotal(double[]numbers)//同じメソッド名で引数が異なる{vartotal=0.0;foreach(varninnumbers){total+=n;}returntotal;}}}}
メソッドの省力可能な引数
usingSystem;namespaceClassSample{classProgram{staticvoidMain(string[]args){varperson=newPerson{FirstName="たかし",LastName="小林"};varname1=person.AddTitle("先生");//引数を指定して呼び出すvarname2=person.AddTitle();//引数を省略して呼び出すConsole.WriteLine(name1);Console.WriteLine(name2);}}classPerson{publicstringFirstName{get;set;}publicstringLastName{get;set;}publicstringAddTitle(stringtitle="様")//titleは省力可能な引数{return$"{LastName}{FirstName}{title}";}}}
コンストラクターの定義方法
usingSystem;namespaceClassSample{classProgram{staticvoidMain(string[]args){varmypet=newVirtualPet();//インスタンス生成時にコンストラクタが呼び出されるConsole.WriteLine($"Name: {mypet.Name}");Console.WriteLine($"Mood: {mypet.Mood}");Console.WriteLine($"Energy: {mypet.Energy}");}}classVirtualPet{publicstringName{get;set;}publicintMood{get;set;}publicintEnergy{get;set;}publicVirtualPet()//コンストラクターの名前はクラスと同じにする{Name="エイミー";Mood=5;Energy=100;}}}
引数のあるコンストラクター
usingSystem;namespaceClassSample{classProgram{staticvoidMain(string[]args){Console.Write("名前を入力してください⇒");varname=Console.ReadLine();varmypet=newVirtualPet(name);//引数を指定したコンストラクターが呼ばれるConsole.WriteLine($"Name: {mypet.Name}");Console.WriteLine($"Mood: {mypet.Mood}");Console.WriteLine($"Energy: {mypet.Energy}");}}classVirtualPet{publicstringName{get;set;}publicintMood{get;set;}publicintEnergy{get;set;}publicVirtualPet(stringname)//コンストラクターの名前はクラスと同じにする{Name=name;Mood=5;Energy=100;}}}
プロパティに特別な動作を加える
classBook{publicstaticintCount{get;set;}publicstaticvoidClearCount(){Count=0;}publicstringTitle{get;set;}publicstringAuther{get;set;}publicintPages{get;set;}int_rating;//フィールドの定義publicintRating//プロパティの定義{//getアクセサ、setアクセサー内は、メソッドと同様、複数行の処理が欠けるget//getアクセサーの定義{return_rating;//参照時にこのコードが実行される}set//setアクセサーの定義{if(value<=1)//1以下の値はすべて1をセット{_rating=1;}elseif(value>=6)//6以上の値はすべて5をセット{_rating=5;}else{_rating=value;}}}
構造体の定義方法
usingSystem;namespaceClassSample{//card構造体structCard{staticvoidMain(string[]args){varcard=newCard('S',8);//構造体もnew演算子でインスタンスを生成するcard.Print();if(card.Suit=='D'){Console.WriteLine("ダイヤです");}else{Console.WriteLine("ダイヤではありません");}}publiccharSuit{get;privateset;}//読み取り専用プロパティpublicintNumber{get;privateset;}//読み取り専用プロパティ//コンストラクターpublicCard(charsuit,intnumber){Suit=suit;Number=number;}//メソッドpublicvoidPrint(){vars="";switch(Suit){case'H':s="ハート";break;case'D':s="ダイヤ";break;case'S':s="スペード";break;case'C':s="クラブ";break;}Console.WriteLine($"{s}{Number}");}}}
列挙型の定義方法
usingSystem;namespaceClassSample{enumCardSuit{Club,Spade,Heart,Diamond}//card構造体structCard{staticvoidMain(string[]args){varcard=newCard(CardSuit.Heart,8);card.Print();if(card.Suit==CardSuit.Diamond){Console.WriteLine("ダイヤです");}else{Console.WriteLine("ダイヤではありません");}}publicCardSuitSuit{get;privateset;}//SuitはCardSuit型のプロパティpublicintNumber{get;privateset;}//コンストラクターpublicCard(CardSuitsuit,intnumber)//第一引数ではCardSuit型を受け取る{Suit=suit;Number=number;}//メソッドpublicvoidPrint(){vars="";switch(Suit){caseCardSuit.Heart:s="ハート";break;caseCardSuit.Diamond:s="ダイヤ";break;caseCardSuit.Spade:s="スペード";break;caseCardSuit.Club:s="クラブ";break;}Console.WriteLine($"{s}{Number}");}}}
null
nullはオブジェクトが生成されなかった状態や、指定した条件に合うオブジェクトが見つからなかった状態を表すときによく使われる
usingSystem;namespaceClassSample{classProgram{staticvoidMain(){varbook=GetBook();//nullかどうかでGetBookが成功したかどうかを判断if(book==null){Console.WriteLine("bookオブジェクトは生成できませんでした");}else{Console.WriteLine($"{book.Title}{book.Auther}");}}privatestaticBookGetBook(){varline=Console.ReadLine();varitems=line.Split(',');if(items.Length!=2){returnnull;//入力したデータが正しくない場合はnullを返す}varbook=newBook{Title=items[0],Auther=items[1],};returnbook;}}classBook{publicstringTitle{get;set;}publicstringAuther{get;set;}publicintPages{get;set;}publicintRating{get;set;}}}
Listの使い方
usingSystem;usingSystem.Collections.Generic;//Listを使う際に必要namespaceClassSample{classProgram{staticvoidMain(){varlines=newList<string>{"おはよう","こんにちは","こんばんは"};lines.Add("おやすみ");//Listに追加する際はAddを使うlines.Add("さようなら");lines.RemoveAt(2);//リストから指定の要素を削除するforeach(varsinlines){Console.WriteLine(s);}varcount=lines.Count;//リストの要素数を取得するにはCountを使うConsole.WriteLine(count);lines.Clear();//すべての要素を削除するときはClearメソッドを使うConsole.WriteLine($"{lines.Count}");}}}
usingSystem;usingSystem.Collections.Generic;namespaceClassSample{classProgram{staticvoidMain(){varbooks=newList<Book>();//Book型のリストを生成varbook1=newBook("吾輩は猫である","夏目漱石",620,4);books.Add(book1);//1冊目を追加varbook2=newBook("人間失格","太宰治",300,5);books.Add(book2);//2冊目を追加//省略もできる//books.Add(new Book("吾輩は猫である", "夏目漱石", 620, 4));//books.Add(new Book("人間失格", "太宰治", 300, 5));foreach(varbookinbooks){Console.WriteLine($"{book.Title}{book.Auther}{book.Pages}{book.Rating}");}}}classBook{publicstringTitle{get;set;}publicstringAuther{get;set;}publicintPages{get;set;}publicintRating{get;set;}publicBook(stringtitle,stringauther,intpages,intrating){Title=title;Auther=auther;Pages=pages;Rating=rating;}}}
LINQ
Whereメソッドとラムダ式
例1
```C#:ClassSample
using System;
using System.Collections.Generic;
using System.Linq; // LINQを使うのに必要
namespace ClassSample
{
class Program
{
static void Main()
{
var nums = new List { 12, 69, 38, 32, 63, 55, 71, 93, 39, 48 };
var query = nums.Where(x => x >= 50); //Whereは条件に一致した要素を抜き出す
foreach (var n in query)
{
Console.WriteLine(n);
}
}
}
}
```
例2
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;// LINQを使うのに必要namespaceClassSample{classProgram{staticvoidMain(){varwords=newList<string>{"effect","access","condition","sign","profit","line","result"};varquery=words.Where(x=>x.Length==6);//長さ6の文字列だけ取り出すforeach(varwordinquery){Console.WriteLine(word);}}}}
Selectメソッド
Selectメソッドを使えばコレクションの各要素を別の値に変更できる
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;// LINQを使うのに必要namespaceClassSample{classProgram{staticvoidMain(){varnums=newint[]{1,2,3,4,5,6,7,8,9,};varquery=nums.Select(x=>x*2);//各要素を2倍するforeach(varninquery){Console.WriteLine(n);}}}}
各要素の長さを求める
var query = words.Select(x => x.Length);
1つの要素を全て取り出す( ↓タイトルを取り出す)
var query = words.Select(x => x.Title);
OrderByメソッド / OrderByDescendingメソッド
コレクション内のデータを指定した順番で取り出せる
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;// LINQを使うのに必要namespaceClassSample{classProgram{staticvoidMain(){varnums=newint[]{6,4,3,2,5,1,9,8,7,};varquery=nums.OrderBy(x=>x);//小さい順に並べるforeach(varninquery){Console.WriteLine(n);}}}}
大きい順に並べる
var query = nums.OrderByDescending(x => x);
複数のLINQメソッドを連結させることも可能
ドットでつなげる
var query = books.Where(x => x.Rating == 5).Select(x => x.Title);
Take() で先頭から指定した個数を取り出す
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;// LINQを使うのに必要namespaceClassSample{classProgram{staticvoidMain(){varnums=newint[]{6,4,3,2,5,1,9,8,7,};varquery=nums.OrderByDescending(x=>x).Take(3);//先頭の3つを取り出すforeach(varninquery){Console.WriteLine(n);}}}}
Distinctは重複した要素を排除できる
var query = books.Where(x => x.Rating >= 4).Select(x => x.Auther).Distinct;
Anyは条件を満たす要素が含まれているか判断できる
var any = nums.Any(x => x < 0); //マイナス値があるか調べる
IEnumerableを配列に変換するにはToList / ToArrayメソッドを使用する
ToList
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;// LINQを使うのに必要namespaceClassSample{classProgram{staticvoidMain(){varnums=newint[]{62,4,34,26,15,51,97,84,72,};varlist=nums.Where(x=>x<=10).ToList();//Whereの結果をList<int>に変換するConsole.WriteLine(list[0]);}}}
ToArray()はString[]に変更できる
var array = words.OrderBy(x => x).Array();