ターニングポイントさん!?

10bace LOG

タグ: C# Page 1 of 2

.NET Coreのソースコードを拝みたい

◆結論

.NET Core Source Browser

◆遺棄殺

RustでReadLineを書くことについて思いを馳せていて。

System.IO.StreamReader.ReadLine() ってどうやって「一行」を読み込んでんのと思った。だって \r と \n と \r\n が入り乱れておるわけだから。まぁどうせゴリゴリのゴリゴリのゴリゴリのゴリに書いてるんだろうけども、それにしたってどのようにゴリゴリしているのかが気になった。

byteゴリゴリ、stringゴリゴリ、charゴリゴリ。果たしてそこにはどんなゴリラが生息しているんだろうか。気になるゴリよ。

【C#】LINQの可読性

以下の記事に「LINQ 可読性」っていう検索流入があるんで、そのはなし。

初めてLINQという記法を見た人にはなんのこっちゃわからんだろう。
※LINQという名前を冠してはいるが、別に特別なことをしているわけでは無い。だから「LINQという記法」という言い方は正しくない。「LINQのクエリ式」だけが記法として独立している。

結論から言えば、LINQは読みやすい。ただ、学習コストがあるのはある。お前が最終的に達成すべきは顧客満足であって、そのためにLINQの「学習コスト」「開発工数」「保守工数」について考えねばならんだろうな。

◆LINQは何をしているのか

【C#】yield returnのはなし

聖夜なので技術記事を捧げます。

大好評間近な「テメーらは説明が下手だ低能ども」シリーズ。今回はyieldについて。

C#とは書いてるが、C#知らんでも読めるように説明してみる。ヤドカリくらいの知能があればギリ読めるかもしれないな。いや無理かも。割と難解だ。メジロくらいのIQが必要かも。

◆return

ここに、どこの家庭にもあるような普通の関数があります。

※Main関数から開始される。
※Console.WriteLineは、標準出力に値を書きだす関数。

    private static void Main()
    {
        int hoge = 0;

        hoge = Hoge();

        Console.WriteLine(hoge);
    }

    private static int Hoge()
    {
        return 1;
    }

なんのことはない。Hoge()を呼ぶと、1を返してくれる。

それを変数 hoge に格納し、標準出力にWriteしている。つまりコンソールに「1」が表示されるだけのプログラムだ。

【C#】Tuple代入でnullableに明示的に変換

以下のようなコードを書いたら

private static void Main()
{
    var l = new List<int> { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

    var hoge = Enumerable.Empty<(int?, int?)>();
    hoge = l.Select(x => (x, x));

    Console.ReadLine();
}

以下のように怒られた。

CS0266 型 ‘System.Collections.Generic.IEnumerable<(int, int)>’ を ‘System.Collections.Generic.IEnumerable<(int?, int?)>’ に暗黙的に変換できません。明示的な変換が存在します (cast が不足していないかどうかを確認してください)

分かるだろ!空気読めや!察せ!やんだくうきよめ!!

【C#小ネタ】LINQのエラーをtry-catchできない

◆結論

うほーーーーー!が出力される。

◆なんの話だよ

以下のリストをごらんくださぁい。

        private static void Main()
        {
            var hoge = new List<int> { 1 };

            var fuga = Enumerable.Empty<int>();
            try
            {
                fuga = hoge.Select(x =>
                {
                    throw new Exception("こらーーーー!");
                    return 0;
                });
            }
            catch (System.Exception)
            {
                Console.WriteLine("ほげーーーーー!");
            }

            try
            {
                fuga.Any();
            }
            catch (System.Exception)
            {
                Console.WriteLine("うほーーーーー!");
            }

            Console.ReadLine();
        }

このコードでは うほーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー! が出力されるのですね。

◆解説

try-catchの動きの話です。

【C#】EnumのNameをAttributeに設定したいマン

◆結論

nameofはコンパイル時に評価されるでよ。かたやToStringとか文字列リテラルはdynamicだでよ。

◆経緯

こういうEnumがあったとして。

    public enum Animal
    {
        Duck,
        Cock,
        Dick
    }

    public enum Action
    {
        Kick,
        Hack,
        Lick,
        Suck,
        Pick,
        Pack,
        Fuck
    }

こういったコードを書くと

[Authorize(Policy = $"{Animal.Dick}:{Action.Kick}")]

【C#】nullでいいんだけど「未割当のローカル変数 ‘hoge’ が使用されました。」とか突っ込まれるやーつ

意外と = null してる人が多くて。

◆怒られるやーつ

HogeClass hoge;
var hogehoge = hoge;

未割当のローカル変数 ‘hoge’ が使用されました。

うん。

◆解決するけどダサいやーつ

HogeClass hoge = null;
var hogehoge = hoge;

変数名が揃わなくてやな感じ。それに = nullってなんかダメじゃん。あの…あれだからダメじゃん。

【C#】HttpClientFactoryでRequestとResponseのロギング

◆結論

◆和訳

DelegatingHandler 継承したアレを AddHttpClient してるとこで AddHttpMessageHandler しろや。※解説は後述。

【C#】DateTimeOffsetインスタンスから「その日の0時」を取得

なんか微妙に迷った。

◆結論

private static void Main()
{
    var now = DateTimeOffset.Now;
    Console.WriteLine(now);
    Console.WriteLine(now - now.TimeOfDay);
}

TimeOfDayを除けばよろしい。

◆経緯

DateTimeOffsetがあって、それの0時が欲しいなと。start time of dayが欲しいなと。

axiosのgetメソッドでnestedなdataを投げる時のはなし

◆結論

「yarn add qs」しろ。typescript使ってる人は「yarn add @types/qs」しろ。yarn使ってないならnpm使え。帰れバカ。やめちまえ。

使い方は…普通にimportして使え。わかんないならやめちまえ。

★補足

・「hogehoge.com」は実際には「.env」に定義された環境変数だろう。何言ってるかわからないなら無視しろ。

・baseURLでテンプレート文字列使ってるのは、「/api」とかを付け足すため。

◆何が起きたか

ASP.NETでAPIサーバー立てて、HttpGetの口をはやした。画面からaxiosでもってnestedなデータをGETメソッドで送った。[FromQuery]Attributeを指定したclassにbindされなかった。nullになった。一筋の涙が頬を伝った。

Page 1 of 2

Powered by WordPress & Theme by Anders Norén