6
2

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 1 year has passed since last update.

QualiArtsAdvent Calendar 2022

Day 22

C#/UnityのコーディングTips

Posted at

本記事はQualiArts Advent Calendar 2022 22日目の記事です。
普段、少ないコードで書くかを生きがいにしている自分のTips集になります。

switch中に正誤メソッドを挟む

以下の感じで、挟む方法が一般的な気がしますが

var x = "";
switch (x)
{
    case { } n when n.IsNullOrEmpty():
        break;
}

以下の感じで短縮できます。

var x = "";
switch (x)
{
    case {} when x.IsNullOrEmpty():
        break;
}
// or
var x2 = x switch
{
    _ when x.IsNullOrEmpty() => ""
};

switch文はc#7くらいからだいぶ便利になってきてて、柔軟な書き方ができるようになっています。

var x = "";
var x2 = "";
var x3 = (x, x2) switch
{
    (null, _) => "",
    (_, {Length: >5 and <=8})  => "",
    _ when x.IsNullOrEmpty() && x2.IsNullOrEmpty() => "",
    (_, "hoge" or "fuga") => "",
    _ => ""
};

dynamicとgenerics

Editor拡張をしてていてたまに困るのが、ジェネリックスクラスの取り扱いです。
taragetがUnityEngine.Objectなためキャストができません。
そのためdynamicを用いて無理やり変換します。

public override void OnInspectorGUI()
{
    void Do<T>(List<T> list)
    {
    }
    Do((dynamic)target);
}

dynamicは色々危ないので、ジェネリックスにInterfaceを実装したほうがいいです。

null許容型の比較

非null許容型との比較の際nullだった場合必ずfalseになるので短縮して書けます

int? x = null;
// 下二つは同じ意味で両方false
if (x == 2);
if (x != null && x == 2);

ただnull許容型どうしの比較は、お互いnullの場合trueになるので注意が必要です

int? a = null;
int? b = null;
// true
if (a == b);

StartWithとPairWise

UnrixとPairWise, StartWithオペレーターの話です。
今更Unirxみたいな話は戦争が起きそうなのでしません。
PairWiseはストリームの流れた個数が二個にならないと流れないんですが、無理やりStartWithで初期値を流せます

var s = new StringReactiveProperty("hoge");
s
    .Pairwise()
    .StartWith(() => new Pair<string>(null, s.Value))
    .Subscribe()
    .AddTo(this);

まとめ

自分が書いたコードを見返してあまり知られてなさそうなことをまとめました。知らなくても大丈夫な内容です。
来年はちゃんと書きます。

6
2
0

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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?