滅入るんるん

何か書きます

C#

【C#】デフォルト引数のバージョニング問題

C#

.NETのクラスライブラリ設計 開発チーム直伝の設計原則,コーディング標準,パターン作者: Krzysztof Cwalina,Brad Abrams出版社/メーカー: 日経BP社発売日: 2016/02/04メディア: Kindle版この商品を含むブログを見る 『.NETのクラスライブラリ設計』という本…

続: if(flag == true)はありなのか?なしなのか?

blog.meilcli.net 前回の記事ではnon nullな真偽値の場合を前提として考えましたが、nullableな真偽値を考慮すると前回のような結果にならないなということで続編を書きます。 ※真偽値としてのネーミングとしてflagはナシだろ~~wという話はナシでお願いし…

【C#】Unsafeクラスで安全で危険なコードを書こう()

unsafeとは(哲学) C#でのunsafe C#では元来、危険であると書き手が分かっていれば危険でもパフォーマンスを重視した書き方(ポインター)ができました。その危険という状態を表すのがunsafeコンテキストです。 個人的にはこの思想は気に入っていて、ポインター…

【C#】CILの算術演算命令

C#をコンパイルするとCILになりますが、CILの情報は結構少ないので、メモがてらに書いておきます。 基本 たとえば1 + 10とするC#コードがあったとして、これをCILにすると以下のようなものに論理的にはなります。 ldc.i4.1 ldc.i4.s 10 add 逆ポーランド記法…

Azure DevOpsに改名してOSSなら無料/時間無制限ビルドになった旧VSTSを試す

今日の朝にVSTSがAzure DevOpsに改名し、OSS向けのビルド枠が時間無制限ビルドになったと聞いてさっそく試してみました。値段とかそのあたりのことはここに書いてます。そこで、今回CIビルドを試すのはこないだ作ったばかりのSharedPropertyにします。ちょう…

Xamarin.AndroidはViewのClickリスナーを複数登録できる話

Androidアプリ作ってる人にView.setOnClickListenerを使ったことがない人はいないかと思います。今日はそんなsetOnClickListenerな話です。 ※ViewのクリックをハンドリングすることをClickリスナーと表現しておきます。(AndroidとXamarin.Androidで少し名前…

【C#】readonly structの値をメンバーメソッドを呼んで変更しているように見せる方法

C#

C#のreadonly structはフィールドすべてにreadonly制約を掛けることによって防衛的コピーを防げる素晴らしい機能ですが、その反面readonlyなため値の書き換えができなくなります。(※C#コードコンパイル時の話、リフレクション先輩のことは考えないでください…

【C#】構造体の防衛的コピーについて

以前すこし話に触れた構造体の防衛的コピーについてCIL的に見ていこうという記事です。 以前触れた記事: [C#]Big Size Structが値コピーでつらいならin引数で値コピーしなければいいじゃない!! < それ本当? 防衛的コピーとは 構造体の値がreadonlyではな…

【C#】SharpLabを使ってCILを見る

前回・前々回とCILを見るツールを紹介してきたので、SharpLabを紹介しないわけにはいかないだろうということで紹介しておきます。前回: [C#]ILSpyを使ってCILを見る前々回: [C#]ReSharperを使ってCILを見る SharpLabはWebサイト上でC#のコードがコンパイル後…

【C#】ILSpyを使ってCILを見る

前回の記事でReSharperを使ってCILを見てみましたが、ReSharperを利用すると該当ファイルのCILしか見れず、アセンブリ情報などのCILは見れませんでした。前回記事:[C#]ReSharperを使ってCILを見る そこで、ReSharper購入以前に使っていたILSpyを使って見よ…

【C#】ReSharperを使ってCILを見る

こないだセールで買ったReSharperですが、さっそくReSharperの機能をことごとくオフにしていってしましました。(決してReSharperが重いということはない(建前)けど、VisualStudio標準のサジェストとかが優秀になってきたからそのあたりはわざわざReSharperじ…

Xamarin.iOSならExpressionよりリフレクションのほうが早いかもという話

元ネタはこちら: うさ☆うさ日記 - [C#]Xamarin.iOSでLambdaExpression.Compile()が通る件 最初に断っておきますが結構雑なベンチマーク計測してます そこで、本題の件に入る前に技術的背景。 C#でのメタプログラミングにはいろいろと方法があって、この話に…

.NET Core 2.1でstring.StartsWithが遅くなることがある話

個人的にstring.StartsWith系統どれが一番早いの選手権開きたかったので、いろいろと計測していたのですが、どうも .NET Core 2.1だけ異常に遅い場合があるという発見をしたのでメモです。 計測したのはいつも通りBenchmarkDotNetです。計測対象は以下のコー…

【C#】Xamarin.FormsのApplication.Current.Propertiesより高性能な設定保存ライブラリ作った話

タイトルは半分釣りです(ごめんなさい)(半分大真面目) 【告知】Xamarin.Formsのhttps://t.co/eC46vr1kqiを強くしたようなもの(自称)としてSharedPropertyを公開しました~内部的にはUtf8JsonかSpanJsonを使うようにしてます。.NET Standard 2.0で作ってるの…

【C#】【黒魔術】implicit operator: あいまいなユーザー定義の変換を回避する方法

C#

タイトルの通り黒魔術です(多分)、実行環境ごとの動作はどうなるかわかりません。 また、C#などの仕様変更で使い物にならなくなる可能性はあります。(Support extension methods everywhereの流れ次第では仕様変更が入るかもしれない) implicit operatorとは…

.NET Standardでアプリケーションデータを保存するにはどうしたらいいんだろうっていう話

.NET Standardでは着々とAPIの共通化が行われ、PCLを使わなくてもある程度のことまでは .NET Standardで完結し始めてきました。そこで、.NET Standardでアプリケーションデータを保存する際はどうしたらいいか手抜きながらに調べてみたのでメモとして書いて…

csharplang: Disposable pattern

C#

csharplangのC# 8.0のマイルストーン、つまりC# 8.0で追加する予定の機能を眺めていたらDisposable patternが追加されてたのでそれの紹介; Proposal: Allow `using` statement to structurally match `IDisposable` Disposable patternと勝手に呼んでいます…

【C#】Type.GetType(string)するときはアセンブリ情報がないほうが早い

C#

ここ最近作り始めたライブラリで需要があったのでType.GetType(string)のベンチマークを取ってみました。 ことの発端 Type型を一度stringにして保存し、あとで復元するという処理があったのですが、Type型には型情報をstring化するのに二つのプロパティがあ…

【C#】stackallocでstructをスタックに確保してパフォーマンスを上げよう戦略

略してstackalloc戦略です。前回の記事でin引数戦略(最終的にはref戦略な感じになりましたけど)を提示してみましたが、in引数戦略では使える幅が狭いです。なぜかというと、配列が使えないから。.NETでは配列はヒープに確保されるので、原理上、配列の値をロ…

【C#】Big Size Structが値コピーでつらいならin引数で値コピーしなければいいじゃない!! < それ本当?

C#で高速なプログラムにする際のお供な構造体ですが、構造体を使わないほうがいい場面・条件もあります。その一つに"サイズが16バイト未満であること"があります。この16バイトという数字の根拠は明確にはわかりませんが、構造体の特性上よく値コピーが発生…

BenchmarkDotNetを.NET Frameworkと.NET Coreで走らせる方法

C#でベンチマークを取る際に非常に楽に実施できるツールのBenchmarkDotNetで.NET Frameworkと.NET Core両方でベンチマークを取る方法がわかったのでメモ取っておきます。内容はBenchmarkDotNetのFAQに書いてあります。(ちゃんとFAQ読め案件)ベンチマーク対象…

.NET Standardで埋め込みリソースを読み込む方法

Xamarin.Formsを使う場合、共通リソースはPCLや.NET Standardで管理したいですよね。それを実現する一つの手段としてリソースを埋め込むという手法があります。脳死でネットを検索するとPCLでの場合は出てきますが、最近のトレンドは.NET Standardなので、そ…

【C#】Generic indexersが欲しい

C#

突然ですが、ふとこんなコードを T Get(string key) { ... } こんな風に T this[string key] { get { ... } } 書きたくなったことありませんか?私はあります。generic methodをgeneric indexerにできるだろうと、試してみるもコンパイルエラー。比較的優秀…

【C#】コンストラクタで参照渡しできた話と出力変数宣言できるようになる話

C#

よく++C++; // 未確認飛行 Cにはお世話になっていますが、その中のC#7.3新機能説明(式中での変数宣言をできる箇所の拡大)について、お恥ずかしながらよくわからないC#コードがあり、新たな発見をしたので、その報告をします。式中での変数宣言(使える場所の…

Kotlinを学ぶにはC#を勉強したほうがいい(SequenceとLINQ)

タイトル半分ぐらい釣りです(半分大真面目)最初に断っておきますが、Kotlinを勉強するのに必ずしもC#を勉強したほうがいいわけではありません、もちろんVB.NETでも概念は学べますし代替手段はいくらでもあると思います。そこで、なぜC#を勉強したほうがとい…

【C#】配列はIListを実装していた

C#

小ネタはい、久しぶりのC#記事です。1カ月ぶりかな?その間にいろいろとネタは集めたのでちょっとずつ書き出していきます。 まずは、上の画像を見てください。パターンマッチングでIList<string>してからstring[]が重複ケースで失敗しています。これを逆にすると問題</string>…

【Java】Project ValhallaはとてもC#を意識している

小ネタJavaのアップデート予定?方針?の一つのProject ValhallaでのJEP 218: Generics over Primitive Types、つまりジェネリクスでプリミティブ型=>値型のサポートを強化しようというもの(ざっくりした説明)においての話です。ページを見てもらえばすぐわ…

【C#】MvvmLightとReactivePropertyでMVVMしてみる① - MvvmLightのテンプレプロジェクトを作るまで

今週からは勉強もかねてMvvmLight+ReactivePropertyでMVVMプロジェクトを作ってみようと思います。ReactivePropertyでMVVMはしたことあるのですが、ReactivePropertyだけでは比較的軽量のためMVVMするにはUnity(DIのほう)などを入れたり自作でヘルパーを作っ…

C# 8.0に追加されそうな小さな機能候補

C#

今週はネタに困ったのでcharplangでC# 8.0に追加されそうな小さな機能でも紹介しようと思います。ちなみに、C# 8.0で追加されそうな機能の一覧はここで見れます。 Champion "Null-coalescing assignments" 日本語で直訳するとNull合体割り当てですが、意味的…

ReactivePropertyにプルリク出した話

C#

今週のC#はReactivePropertyにプルリク出した話にします。まず、プルリク出すまでの経緯ですが、前々からReactivePropertySlimの軽さについて調査してみようと思っていたので(怠慢で予定より3週間遅い)、今週こそは!とXamarin.Androidプロジェクトで軽い模…