2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【C#】第1回「この機能作ったけどあんまり意味なかったな」選手権

Posted at

最初の発想は・・・

  1. この値はこの別の値と組になっているのが正しいことが証明されている配列がほしい。(例えば、UnityでGameObject(A)とGameObject(B)が空のGameObject(C)の子に設定されているオブジェクトが複数個あるときにどのオブジェクトがどのオブジェクトと組になっているのかが知りたい)
  2. Dictionaryよりも柔軟性がある物が欲しい。
  3. Listとタプルで作ろう。
    そんな考えでできたのが以下の拡張メソッド。
ListExtentions.cs
public enum LRSwitch{
    LEFT,
    RIGHT
};
public static bool TupleContains<TObject, TComponent, TValue>(this IList<(TObject, TComponent)> extList, TValue value, LRSwitch lr)
{
    if(lr == LRSwitch.LEFT)
   {
       return extList.Select(obj => obj.Item1).Any(item => item.Equals(value));
   }
   else if(lr == LRSwitch.RIGHT)
   {
       return extList.Select(obj => obj.Item2).Any(item => item.Equals(value));
   }
   else
   {
       return default;
   }
}

public static TComponent TupleContainsGetComponent<TObject, TComponent, TValue>(this IList<(TObject, TComponent)> extList, TValue value)
{
    return extList.First(obj => obj.Item1.Equals(value)).Item2;
}
  • 1つ目の拡張メソッドはListの中にあるタプルの組1か組2の値を第3引数と比較して格納されていたら真偽値を返すだけの拡張メソッド。
    普通にListにContainsメソッドにがあるけど、そのためにちょっと毎回この手のロジックを書くのがめんどくさかったのが伺える。
  • 2つ目はタプルの組1の値と第3引数と比較して、その値が存在していたら組2の値を返す拡張メソッド。なんか複雑なことをしてそうでしてない感じ。・・・なんで作ったんだろう?多分存在するかどうかを確認しつつ値を返してほしかったんだろうね・・・

総評(自分でだけど)

見れば見るほど「Dictionaryでよくね?」という気持ちが溢れ出ています。
多分あとからどちらの数値にも値を代入するつもりがあったんだろうね・・・
でも、これで少しでもC#の拡張メソッドについて学べたのは良かったと思います。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?