21/05/25 06:29:00.67 PTaC3ctB0.net
LangVersionか何か判定する方法ある?
実際はLangVersionを判定したいわけじゃなく、
C#が「interfaceのデフォルトが使えるバージョン」ならデフォルト実装を用意したものを、
そうでなければデフォルト実装はなし、
というのを#ifプリプロセッサな何かで切り替えたいんだが。
64:デフォルトの名無しさん
21/05/25 11:32:44.90 MwLEufUx0.net
どうせ.NET Frameworkなら最新のC#使ってもデフォルト実装は使えないんだから
言語のバージョンじゃなくて.NETのバージョンで分けたほうが良くない?
65:デフォルトの名無しさん
21/05/25 13:30:21.38 FpV6PuqQa.net
あればここに載せてるだろうからないんでしょうね
URLリンク(docs.microsoft.com)
まああってもC#のプリプロセッサのシンボルは定義済みかどうかしか評価できないから
既述が大変そうだよね
結局VS使うならプロジェクトのプロパティーで自分でシンボル定義してソリューション構成を
手動で切り替えるしかないんじゃないのかな
66:デフォルトの名無しさん
21/05/25 14:32:42.00 PTaC3ctB0.net
#if (NET or NETCOREAPP3_1)
でとりあえず要件満たせそうなので
これでいきます。
67:デフォルトの名無しさん
21/05/26 09:59:35.98 qJ3DTor20.net
最近VisualStudio2017から2019に変えたんだけど
WindowsAPIは使えなくなったの?
2017で書いたプロジェクトなら2019で読み込んで動くけど
直接2019から同じこコード書き始めると「現在のコンテキストには名前が見つかりません」
ってでて波線がで警告表示される
これは2019から始まったターゲットフレームワークとかいう奴が影響してるのか?
どうしたら以前のようにWindowsAPIが使えますか?
68:デフォルトの名無しさん
21/05/26 10:14:15.14 FSQy2KRV0.net
普通にやれば普通に今まで通り動くので
何かが普通にできてないんだろう としか言えん
Windows API呼び出すならTargetFrameworkはnet5-windowsにすべきではあるけど
別にそれは必要条件ではない
単にnet5でも問題ない(Windows以外だと実行時例外になるだけ)
69:デフォルトの名無しさん
21/05/26 10:49:28.94 qJ3DTor20.net
>>68
resありがとうございます
.NET5で試してもできませんでした
ただし「usinディレクティブか、アセンブリの参照が違うのでは?」
と具体的なメッセージに変わりましたから、
何か探しに行ってくれてるようですね
これは単純にIDEとしてのVS2019のバグということでしょうかね?
70:デフォルトの名無しさん
21/05/26 10:51:53.53 FSQy2KRV0.net
いや単にあなたのコードの記述ミスということだと思うよ
71:デフォルトの名無しさん
21/05/26 11:07:29.14 SkyFdszB0.net
もしかするとDLL参照が黄色いマーク付いてるんじゃね?
72:デフォルトの名無しさん
21/05/26 11:19:52.23 cScpWA/k0.net
昨日今日使い始めたやつがツールのバグを疑う世界
73:デフォルトの名無しさん
21/05/26 11:25:04.91 2/BE6bBSF.net
ソースと環境を晒すべき
74:デフォルトの名無しさん
21/05/26 12:15:50.54 Q8/sORJB0.net
ブラウザからSQL文とパラメータを受け取って、PostgreSQLのテーブルを検索し、結果を返すWebAPIを作成しています。
PostgreSQLとのやり取りはDapperを使っており、パラメータは匿名型で記述しています。
ブラウザからSQL文とパラメータを送る際にjson形式でシリアライズしているのですが、これをAPI側でデシリアライズを行うと匿名型が元と違う形になってしまいます。
var foo = new { Key1 = 1, Key2 = 2};
// foo = { Key1 = 1, Key2 = 2 }
var strJson = JsonSerializer.Serialize(foo);
// strJson = "{\"Key1\":1,\"Key2\":2}"
var bar = JsonSerializer.Deserialize<object>(strJson);
// bar = ValueKind = Object : "{"Key1":1,"Key2":2}"
デシリアライズした時に、シリアライズ前と同じ状態にすることは出来ないのでしょうか。
75:デフォルトの名無しさん
21/05/26 12:45:20.58 cScpWA/k0.net
DataContractJsonSerializerの代わりにJavaScriptSerializerを使う
76:デフォルトの名無しさん
21/05/26 13:08:02.39 FSQy2KRV0.net
Json.NETなら.Deserialize<Dictionary<string, object>>(...)にすればDapperのパラメータオブジェクトに使える
77:デフォルトの名無しさん
21/05/26 14:04:52.01 Q8/sORJB0.net
>>75,76
Json.NET で出来ました。ありがとうございます。
78:デフォルトの名無しさん
21/05/26 17:06:43.67 vmYXos7Q0.net
処理を非同期にするかどうかの切り分けってどうすればいいん?
HTTPリクエストとか、I/Oとか、DB書き込みくらいでいいの?
79:デフォルトの名無しさん
21/05/26 17:56:01.15 cScpWA/k0.net
野生の勘
80:デフォルトの名無しさん
21/05/26 18:02:02.54 FSQy2KRV0.net
基本はIOバウンドなら非同期、CPUバウンドなら同期、でいいんじゃないかな
81:デフォルトの名無しさん
21/05/26 18:17:47.51 rgCCVIaL0.net
処理の完了を待たずに他の処理をしたい場合や
UIスレッドをブロックしたくない場合は非同期にする
82:デフォルトの名無しさん
21/05/26 18:34:13.84 wtKQcQ0P0.net
非同期にしたら最後
次の処理が次の行とは限らない地獄
83:デフォルトの名無しさん
21/05/26 18:41:14.07 UtsUe89ga.net
基本的にまずは全て非同期
これは非同期にする意味ないなと思ったら同期