Effective C# 6.0
【一休 × bitFlyer】C#を使ったサービス開発の裏側
2017/6/28
宇都宮 諒(@ryo511)
※各項目の頭にある数字は
Effective C# 6.0における項目番号です
// こちらでもいいけど
string foo = "foo";
// こっちの方がおすすめ
var foo = "foo";
public IEnumerable<string> FindCustomersStartingWith(string start)
IEnumerable<string> q = from c in db.Customers
select c.ContactName;
var q2 = q.Where(s => s.StartsWith(start));
return q2;
}
public IEnumerable<string> FindCustomersStartingWith(string start)
var q = from c in db.Customers
select c.ContactName;
var q2 = q.Where(s => s.StartsWith(start));
return q2;
}
var f = GetMagicnumber();
var total = 10 * f / 6; // totalは6.666... だが、切り捨てられて6になる
int GetMagicNumber()
{
return 4;
}
double f = GetMagicnumber();
double total = 10 * f / 6;
var foo = "foo";
var bar = "bar";
// こっちでもいいけど
var sf = string.Format("{0}{1}", foo, bar);
// こっちの方がオススメ
var is = $"{foo}{bar}";
// {}の中には式を書ける
var ex = $"{GetString()}";
public static void DoSomething(object thisCantBeNull)
{
if (thisCantBeNull == null)
throw new ArgumentException("thisCantBeNull");
}
public static void DoSomething(object thisCantBeNull)
{
if (thisCantBeNull == null)
throw new ArgumentException(nameof(thisCantBeNull));
}
public class EventSource
{
public EventHandler<int> Updated { get; set; }
public void RaiseUpdates()
{
_counter++;
var handler = Updated;
if (handler != null)
handler(this, _counter);
// 以下のコードではダメ(スレッドセーフではない)
// if (Updated != null)
// Updated(this, _counter); // Updated がnullになってるかも
}
private int _counter;
}
public class EventSource
{
public EventHandler<int> Updated { get; set; }
public void RaiseUpdates()
{
_counter++;
Updated?.Invoke(this, _counter);
}
private int _counter;
}
public static List<char> GetAlphabetList()
{
var letter = 'a';
var charList = new List<char>();
while (letter >= 'z')
{
charList.Add(letter);
letter++;
}
return charList;
}
public static IEnumerable<char> GenerateAlphabet()
{
var letter = 'a';
while (letter >= 'z')
{
yield return letter;
letter++;
}
}