より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

C#

HashSetの方がListよりパフォーマンスが速い。そして両者の違いは?

C#

ソースレビューしていたら、List使うだろーと思っていたところでHashSetを使われていることがありました。 なぜにHashSet? そもそもHashSetってなに?と調べてみたところ……。 qiita.com 圧倒的にListよりHashSetの方が検索速度が速いことを初めて知りました…

読書感想「Unity5とC#で作るライフゲーム: UnityとC#で作ってみようシリーズ3」

C#

本に書いてある通りにやっただけですが、サクッと作れるものなんだなぁと感心してしまいました。 開始して、マウス右クリックする ライフゲームは以下の法則です。 死んでいるセルの周囲8セルに生きているセルが3つあれば、セルが生まれる 生きているセルの…

Unityでプロジェクト新規作成しただけなのに、Enter Safe Modeって何これ

C#

Unityでプロジェクトを新規作成して、さあ新しい開発を、と行きたかったのですが、なんとエラー。 なんだ、これ 実行できず。 問題を解決しろというのにも、作ったばかりのブランクプロジェクトに問題も何もモノすらないという状況。 最新版のUnityをインス…

読書感想「Unity2D超入門講座」

C#

本当の超入門なのか、スクリプトを丁寧に説明しているものの、少し内容に物足りない印象を受けました。 マリオタイプのゲームを一つ作るだけで本が終わっています。 ただ、サンプルでダウンロードできる画像はいいですね。

Unityの2D画面座標って、何ベース? タイルセット描画をしてみた

C#

Unityの2Dゲームテンプレートを触っていたのですが、キャラの座標が-5とかで画面の端になってしまいます。この画像は128x128なんですが。 画像は128x128のサイズなんですが Unityは3Dありきでカメラ位置で2Dを実現しているからのようです。 2Dトグルをオフに…

難読化するときは、nameofやReflectionには注意

C#

今の仕事だと、難読化しているコードがありますが、難読化するときの注意点としてはnameofでしょう。 Logger.Info($"{nameof(MethodA)}") なんてして、メソッド名をスマートにログ出力。 と行きたいところですが、難読化した時は実際はメソッド名が変わって…

読書感想「C#ハウツー: 逆引き入門・こんな機能はどう書くの? 」

C#

Finalizer 以下のようなコード。 GC.Collectしてもデストラクタは呼ばれないですね。 using System; namespace Finalizer { class Sample:IDisposable { public Sample() { Console.WriteLine("私、産まれました!"); } ~Sample() { Console.WriteLine("私、…

RegistryKey.OpenSubKeyでUnauthorizedAccessException

C#

MSDNには書いていないのですが、UnauthorizedAccessExceptionが発生することがあるようです。 うーん。MSDNを信用すれば全てが解決するわけではないのですね。 docs.microsoft.com 対応方法としては、OpenSubKey(String, Boolean)を使うといいようです。 sta…

読書感想「裏C#入門・あなたの知らない太古のテクニックと遠い昔の物語」

C#

C#の登場から、コレクション、LINQ、dynamic型。 C#の変遷について筆者の感想をつらつらと語られた本です。 C#はJavaに近くて、そうではない。NUnitは命名規則ではなく、Attributeで片付けられる。そうだよなあと思います。 印象的だったのは巻末で語られる…

MaterialDesignXamlでバッジを表示させたい

C#

MaterialDesignXamlでいわゆるバッジを表示させたいな、と ボタンの右上に表示させる方法であるサンプルは用意されています。 xamlだと以下のようになりますね。 <materialDesign:Badged Badge="3"> <Button Content="MAIL" /> </materialDesign:Badged> ただ、私がやりたいのは以下のような形 その場合は以下のようなコード。 <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding CallName.Value}" /> </textblock></stackpanel>

Versionクラスのコンストラクタに文字列が渡せる

C#

docs.microsoft.com Windowsのファイルバージョンといえば、1.2.3.4という4つのセクションに分かれたバージョン体系ですので、であればC#のVersionクラスもそれしか対応していないのかなと思っていたのですが、2.0という文字列でもVersionクラスはよしなに処…

WPFのTreeViewで指定のTreeViewItemまでスクロールする

C#

TreeViewで選択している項目を保存して、アプリを起動し直した時に選択していた項目を復元する といったことを実現したのですが、しかし選択項目までスクロールされないんですね。 それにはBringIntoViewを使います。 しかし、Bindingされているオブジェクト…

やっとBody Styleに慣れたので、Apply Code Body Styleを適用

C#

public string FaceFilename { get { return Path.Combine(DirectoryPath FaceSingleName); } } というコードは、最新のC#では以下のように書くことが可能です。 public string FaceFilename => Path.Combine(DirectoryPath, FaceSingleName); ただ、自分、…

WPF+WndProc+Notification.Wpfで多重起動通知

C#

多重起動の通知にメッセージダイアログを使っていたのですが、いちいちメッセージダイアログでOKするのが面倒。 Windowsの通知とか使えないかなということチャレンジしてみました。 プロセス間通信についてはgRPCとかも考えたのですが、そこまで大掛かりな仕…

意外と奥が深いDialogResult

C#

WinFormsのFormの仕様として、×で閉じると、DialogResultがCancelになります。Alt+F4で閉じても同様です。 docs.microsoft.com FormのDialogResultの返り値を処理する場合は要注意です。 というわけで上記のようなものを作って動作確認してみました。 Formの…

IDisposableを継承したクラスのインスタンスをDisposeしないとどうなるか?

C#

IDisposableを継承したクラスのインスタンスはDisposeしろ 前職では、徹底されていたことです。 ただ、Disposeしなかったら、具体的に何が起きるのか? 復習も兼ねて、実際に起こして見ることにしました。 単純にFormを2つ宣言し、Mainのフォームから何度もF…

Log4netを卒業して、NLogへと

C# C#

社内で新しいデスクトップアプリケーションを開発することになったのですが、ログ出力はどうしようかと考えていたとき思い出しました。 Log4netは開発休止宣言 代替手段はどうするかということでNLogを選ぶことにしました。 Serilogもありますが、GitHubのSt…

Unityで動的に画像を読み込んでスライスする

C#

Unityで動的に画像を読み込んで、指定の矩形を取得する場合 Sprite.Createを用います。以下のようなコード。 var texture = Resources.Load<Texture2D>("Levels/tileset"); var sprite = Sprite.Create(texture, new Rect(32, 0, 32, 32), new Vector2(0.5f, 0.5f)); お</texture2d>…

クラスと構造体を代入された後の挙動について

C#

2024/2/29 追記 参照渡しという言葉を使っていましたが、言葉の使い方が適切ではないので、修正しました。 C#の細かい挙動ですが、大事なことなのでメモ。 クラスと構造体を代入された後の挙動について。 using System; public class Program { public stati…

Form.Enabled=falseの意外な効用

C#

WinFormsのアプリケーションを開発中に あっ、これ、処理中に他の操作されたらダメじゃん こういうことって網羅的なテストでは盲点になりがちですよね。 で、ツールだからざっくり一括でコントロール全体をDisabledにしたいということで、親となるFormのEnab…

MaterialDesignXamlのPackIconは色を付けられる

C#

小ネタですが、思い込みがあって気づいたのでメモ。 MaterialDesignXamlにはPackIconとして MaterialDesginのアイコンを表示する機能があります。 これですが、デフォルトではモノクロですが、色をつけることが可能です <materialDesign:PackIcon Kind="InformationCircle" Foreground="LightSkyBlue" Width="18" Height="18" /> 単純にForegroundプロパティを指定す</materialdesign:packicon>…

String.Splitするとき、対象の文字列に区切り文字がなくても例外にはならない

C#

完全に小ネタなのですが、へーと思った話を。 C#にはString.Splitという関数が存在します。 docs.microsoft.com これはカンマなどで文字列を区切る処理なのですが、文字列に指定した区切り文字がなくても例外にはなりません。 using System; public class Pr…

ReadOnlyReactivePropertyを使う

C# C#

だいぶ、 ReactivePropertyを使ったのですが、まだReadOnlyReactivePropertyを使いこなしてませんでした。 QuickConverterもあるが、ConvertBackを使わない表示用だけだったら、こっちの方がプログラムで複雑なロジックもかけます。 CombineLatestも使えるの…

C#には CurrentCultureとCurrentUICultureの二つがある

C#

C#には CurrentCultureとCurrentUICultureの二つがあります。 CurrentCultureは日付形式などのフォーマットを扱う CurrentUICultureはメッセージなどを扱う 一つにしてくれよと言いたいところですが、この概念があるから、メッセージは英語表記だけど、日付…

WPFのTreeViewをドラッグ&ドロップできるようにする

C#

以下の記事を参考にさせてもらいました。 aonasuzutsuki.hatenablog.jp 同じ方のGitHubにあるようにBehaviorsにした方が良いです。 SavannahManager/TreeViewItemInfoBase.cs at master · AonaSuzutsuki/SavannahManager · GitHub SavannahManager/MoveableT…

WPFのTreeViewのIsExpandedがViewModelに反映されない

C#

WPFのTreeViewですが、ツリーのノードを開いた状態を扱うプロパティはIsExpandedです。 このプロパティ、どうしてBindingしているのに、コントロールの状態が ViewModelに反映されないんだろうとハマっていました。 ViewModel側からプロパティを変更すると、…

UserControlのSliderを領域全体に表示したい

C#

WPFのSliderコントロールですが、UserControl上のSliderなど、小さいサイズになってしまうことがあります。 Why? <StackPanel> <Slider Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType=StackPanel}}" /> </StackPanel> とStackPanelで囲んで、親のサイズに合わせるようにすると良いみたいです。 stackoverflow.com

ReactivePropertyでプロパティ以外の値も使って複雑な検証をしたい

C#

検索すると、ValidationAttributeを宣言する方法などが出てくるのですが もっと複雑な値の検証がしたいんだけど! ってなって、探しました。 searchcode.com public Hoge { get; set; } = new ReactiveProperty<bool>(); のように宣言して、以下のように Hoge .Set</bool>…

MainWindowやMainWindowViewModelを格納する名前空間の命名をどうしようか悩んだ

C#

MainWindowやMainWindowViewModel、その関連のクラスを格納する名前空間の命名に困ってました。 そのまま直下でいいんですが、WPFアプリケーションだと、ViewsとViewModelsなどと、また分けたいのです。 まんまだとMainでいいんですが、クラス名と混同しない…

iTunes has not been found. Please ensure to have a valid iTunes installation in order to communicate with Apple devices in Windows

C#

XamarinがまたMacと接続できなくなってしまいました。 例によって、Visual Studioの出力ウインドウを確認すると iTunes has not been found. Please ensure to have a valid iTunes installation in order to communicate with Apple devices in Windows iTu…