Created
January 19, 2019 14:57
-
-
Save orange-in-space/51a5ea3884bc0f001923b0a8a6734772 to your computer and use it in GitHub Desktop.
ちゃんと型検査される、『「どっちがでかいの?ていうか同じ?」型』><
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class HTU | |
{ | |
public void Test() | |
{ | |
int a = 10;//IComparable | |
int b = 42;//IComparable | |
//こう書くよりも | |
//if (a == b) | |
//{ | |
// //同じ | |
//} | |
//else if (a < b) | |
//{ | |
// //右でかい | |
//} | |
//else | |
//{ | |
// //左でかい | |
//} | |
//こう書ける方がエレガントじゃん?>< | |
switch (ThreeWayComparison.Compare(a, b)) | |
{ | |
case OrderIs.Equal: | |
{ | |
//同じ | |
break; | |
} | |
case OrderIs.LessThanRight: | |
{ | |
//右でかい | |
break; | |
} | |
case OrderIs.GreaterThanRight: | |
{ | |
//左でかい | |
break; | |
} | |
} | |
//さらにC# がもし宇宙船演算子導入したら | |
//switch (a <=> b) | |
//って書けるね>< | |
} | |
} | |
//ここから | |
public enum OrderIs : int | |
{ | |
LT = -1, | |
EQ = 0, | |
GT = 1, | |
// | |
LessThanRight = -1, | |
Equal = 0, | |
GreaterThanRight = 1, | |
} | |
public static class ThreeWayComparison | |
{ | |
public static OrderIs Compare<Type>(Type left, Type right) | |
where Type : IComparable | |
{ | |
return (OrderIs)left.CompareTo(right); | |
} | |
} | |
//ここまで |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment