C#, C♯, C#相談室 Part96at TECH
C#, C♯, C#相談室 Part96 - 暇つぶし2ch1:デフォルトの名無しさん
21/12/20 11:03:25.88 sdn/+VfW0.net
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
URLリンク(www.visualstudio.com)
■コードを貼る場合はこちら
URLリンク(ideone.com)
■前スレ
C#, C♯, C#相談室 Part94
スレリンク(tech板)
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

2:デフォルトの名無しさん
21/12/20 11:04:48.54 sdn/+VfW0.net
■関連スレ
初心者の質問向けはこちら
ふらっと C#,C♯,C#(初心者用) Part153
スレリンク(tech板)
■過去スレ
C#, C♯, C#相談室 Part90
スレリンク(tech板)
C#, C♯, C#相談室 Part91
スレリンク(tech板)
C#, C♯, C#相談室 Part91 (実質Part92)
スレリンク(tech板)
C#, C♯, C#相談室 Part92 (実質Part93)
スレリンク(tech板)
C#, C♯, C#相談室 Part93 (実質Part94)
スレリンク(tech板)
C#, C♯, C#相談室 Part94 (実質Part95)
スレリンク(tech板)

3:デフォルトの名無しさん
21/12/20 11:06:37.52 sdn/+VfW0.net
とりあえず落ちてたから立てた
なんかミスってたら訂正よろ

4:デフォルトの名無しさん
21/12/20 19:23:43.25 iidsGNEi0.net
たておつ
URLは変わってないけど今はVisual Studio 2022だな
あとふらっとのテンプレにある.NETの公開ソースのURLはあってもいいかも
■.NETのソースファイルはこちら
URLリンク(referencesource.microsoft.com)
URLリンク(source.dot.net)

5:デフォルトの名無しさん
21/12/21 10:28:11.88 EWzKnmTS0.net
.NET5 Windows Form のユーザーコントロールで、Panelの様にデザイナで
他のコントロールを貼り付けられるようにするにはどのようにすれば良いので
しょうか。

6:デフォルトの名無しさん
21/12/21 11:00:03.59 noIk9+eaM.net
>>5
普通にデザイナーでポトペタ出来るけど?
vs2022

7:デフォルトの名無しさん
21/12/21 11:11:13.08 EWzKnmTS0.net
>>6
ユーザーコントロールを貼り付けるんじゃ無くて、ユーザーコントロールに貼り付けたいんだけど・・・
あと、ユーザーコントロールのデザイナでは無く、フォームのデザイナでね。

8:デフォルトの名無しさん
21/12/21 11:19:23.77 noIk9+eaM.net
>>7
フォームに乗っかってるユーザコントロールの中に部品をポトペタしたいのか?
無理です!

9:デフォルトの名無しさん
21/12/21 11:45:14.37 EWzKnmTS0.net
>>8
仕様的に不可能と言うことですね。
ちょっとやり方を変えてみます。
レスThxです。

10:デフォルトの名無しさん
21/12/21 11:55:13.78 noIk9+eaM.net
何がしたいんだ

11:デフォルトの名無しさん
21/12/22 01:03:21.12 grfkhfCP0.net
>>5
Panelを継承してカスタムコントロールつくれば?

12:デフォルトの名無しさん
21/12/24 19:07:23.85 kDNbEesr0.net
1乙

13:デフォルトの名無しさん
22/01/07 01:04:58.15 wvMkhd+/0.net
WPFやWinUIなら出来るけど

14:デフォルトの名無しさん
22/01/07 19:01:19.47 6zNCaZbD0.net
C++のvectorは、値型だと突っこめる奴がいないレベルの低さに涙が出る

15:デフォルトの名無しさん
22/01/07 19:34:32.36 qow9t6Ky0.net
恥ずかしい誤爆だな。
初心者のくせにマウンティングしようとするからだぞ。

16:デフォルトの名無しさん
22/01/19 13:00:14.97 sR6sbC/m0.net
.netframework4.7+WinFormでフォームのActiveControlがTextBoxで
そのコントロールのValidatingイベントが実装されていたらValidatingイベントを呼び出す
ってのをやりたいんですがいい方法はないですか?
if ((this.ActiveControl is TextBox box) && !(box.Validating is null))
{
 var args = new CancelEventArgs(false);
 box.Validating(args);
}
こんな感じに書ければいいんですが「Validatingは+=、-=の左辺のみ使用できます」とエラーになってしまいます
リフレクション使って無理矢理OnValidatingを呼び出すしかないんですかね?

17:デフォルトの名無しさん
22/01/19 13:42:26.63 oO7gN1wAa.net
Textbox派生クラス作ってOnValidating()呼び出したら?

18:デフォルトの名無しさん
22/01/19 18:56:18.18 DmIv8IzU0.net
イベントの正体はマルチキャストデリゲートのはずだから
MulticastDelegate.GetInvocationList でいけんじゃね
つかコントロール参照とれてるなら普通にInvokeするだけで良い気がしてきた

19:デフォルトの名無しさん
22/01/19 22:31:55.60 hgfWYzZO0.net
ところがどっこいeventのマルチキャストデリゲートはprivate扱いなので外から触れないのだ

20:デフォルトの名無しさん
22/01/20 06:40:21.62 yvia8PDa0.net
デリケートな問題やね

21:デフォルトの名無しさん
22/01/20 07:45:00.86 UFDwubQ6M.net
ハートはもう気ままにreflection♪

22:デフォルトの名無しさん
22/01/20 19:49:35.36 4okD0pz10.net
デリケートゾーンのかゆみにはタイガーバーム♪

23:デフォルトの名無しさん
22/01/20 20:31:44.75 EmGHfkcx0.net
キンカンと薄荷油お勧め

24:デフォルトの名無しさん
22/01/21 07:25:25.81 Yyf/9wZ7M.net
private をc# で突破するのは
system.reflectionをggrたまえ

25:デフォルトの名無しさん
22/01/21 07:44:34.97 cI8Ya7xA0.net
それってリリースビルドでも大丈夫なん?

26:デフォルトの名無しさん
22/01/21 07:48:43.10 Yyf/9wZ7M.net
もちろん
DataGridのプライベートメンバーを
操作するサンプルとかが転がっている

27:デフォルトの名無しさん
22/01/21 08:19:27.27 Gz0vCIiGa.net
正攻法は派生。次点でreflectionでprotected
それらで解決できる問題なのにreflectionでprivate触るのはただのバカだよ
privateは基本的に保証されないものだから突然使えなくなっても文句言えない

28:デフォルトの名無しさん
22/01/21 11:22:05.14 Yyf/9wZ7M.net
ネタにマジレスカッコ悪

29:デフォルトの名無しさん
22/01/21 13:23:55.95 PpWisB0YM.net
マ板ならともかくム板の相談スレで悪質なネタ書くような奴にはなりたくないな

30:デフォルトの名無しさん
22/01/21 13:58:52.25 Gz0vCIiGa.net
どう見てもネタじゃないだろ。忘れてくださいってだけだよ
本気でネタだと思って書いてたなら単なる基地外。でもまあ5chには多いから本気でそう思ってたのかもしれないがw

31:デフォルトの名無しさん
22/01/22 13:53:51.52 60KCKgbr0.net
どう考えても20からの流れはネタだろぅ
なんか悪いもんでも喰ったのか?
トウダイツブは毒腺除去せずに売っている場合があるから気をつけろよ。

32:デフォルトの名無しさん
22/01/22 15:39:53.29 rpi4epE/0.net
>>31
どうみても>>24からの流れはネタになってないんだが
ちゃんと流れ見えてるのか?ネタは外すと痛いぞ

33:デフォルトの名無しさん
22/01/22 19:54:59.23 60KCKgbr0.net
実装可否ではなく俺の美学に反する奴は全て悪。
って主張そのものがネタだと思っていたんだがマジだったのか。
そういう主張はnoteかquiitaにでも書きたまえ

34:デフォルトの名無しさん
22/01/22 23:08:24.28 OPsihse90.net
ガイジ多すぎ

35:デフォルトの名無しさん
22/01/24 12:17:52.32 8sRMh2mLM.net
いまいち何がしたいのか分からんが、Validatingの処理を別メソッドでやるようにしてEnterイベントでそのイベント実行すればいいんでないの
継承コントロール作れるなら継承した方がいいけど

36:デフォルトの名無しさん
22/01/24 14:24:45.58 VRumLvNTM.net
よくわからないが最近のC#は
private メンバーを派生クラスから
アクセス出来るようになったのかね?
19にはprivateと明記されているが
別の世界線の住人かな?w

37:デフォルトの名無しさん
22/01/24 14:37:40.44 zeqExr0Ka.net
privateに格納されてるイベントを呼び出す処理が実装されてるんだよ
それがon~系の関数でprotectedもしくはpublicになってる
今回はprotectedだから派生してやればそれを呼び出せるということ

38:デフォルトの名無しさん
22/01/24 14:51:41.28 VRumLvNTM.net
それは、19の時点で公開されている情報では無いな
只の後出しじゃんw

39:デフォルトの名無しさん
22/01/24 14:55:19.40 zeqExr0Ka.net
>>16-17 を見てみろ。質問主もon~を把握してるとこから始まってるんだよ・・・

40:デフォルトの名無しさん
22/01/24 15:08:11.62 VRumLvNTM.net
ならミスリードは19やね

41:デフォルトの名無しさん
22/01/25 06:41:35.44 iMjZ0/CX0.net
19で話の流れが変わった事に対して
別の回答を出した24に対して
いきりマウントした27がガイジという結論やな

42:デフォルトの名無しさん
22/01/25 09:43:08.82 9Tw1d9u5M.net
>>41
> 別の回答を出した24に対して
本人によるとネタらしいぞ
また恥の上塗りしちゃったねw

43:デフォルトの名無しさん
22/01/25 10:48:13.94 f2t7Ea9PM.net
基地はNG推奨

44:デフォルトの名無しさん
22/02/05 16:47:04.66 tJRnKD74a.net
構造体の配列のメモリ確保で
データを入れる事は
できますか
A[] ={{1,2,2},{3,4,2},{1,5,6}}
みたいなノリの
お願いいたします

45:デフォルトの名無しさん
22/02/05 16:51:55.17 gB/WrKWla.net
それと多重配列で
初期値データ入れたり

46:デフォルトの名無しさん
22/02/05 17:50:07.67 B70fTfWxa.net
A = new int[][] { new int[] { 1, 2, 2 }, new int[] { 3, 4, 2 }, new int[] { 1, 5, 6 } };

47:デフォルトの名無しさん
22/02/06 06:30:33.16 SLNZfJCCa.net
それと多重配列で
初期値データ入れたり

48:デフォルトの名無しさん
22/02/06 11:36:56.19 PShjp8Rsa.net
多重配列がどんなか知らないけどできるだろ。ぐぐれ

49:デフォルトの名無しさん
22/02/06 15:12:56.93 OIlcPbSe0.net
多重配列とか勝手に用語作って質問するのは良くないよ。

50:デフォルトの名無しさん
22/02/06 15:21:21.57 +LnLbHsI0.net
コマンドプロンプトで起動するソフトで
コマンドプロンプトだと途中処理取得できるけど
C#上でリアルタイムで途中処理表示させるのって
スレッドを非同期にするやりかたとか考えた方がいいの?

51:デフォルトの名無しさん
22/02/06 15:24:24.54 PShjp8Rsa.net
プロセスの標準出力を読むだけ
C#側がシングルスレッドでもリアルタイムに取得して表示できる

52:デフォルトの名無しさん
22/02/06 17:31:20.88 TTEcICQ70.net
>>49
グーグル先生は賢い「多重配列」で検索すると「多次元配列」が出てくる。間違える人が一定数居るんだな。
c#だと多次元配列じゃなくてコレクションを使うほうが多いが。

53:デフォルトの名無しさん
22/02/06 17:34:23.14 TTEcICQ70.net
>>50
非同期にしなくても表示出来るが非同期の方がスマート

54:デフォルトの名無しさん
22/02/06 20:51:37.74 St9v7rC+0.net
C#で多次元配列とか速度も遅いし普通は使わん

55:デフォルトの名無しさん
22/02/07 00:06:03.73 tbXg2wz+0.net
せやな

56:デフォルトの名無しさん
22/02/07 08:00:35.82 2lq/vobIM.net
コンソールを開きたまえ

57:デフォルトの名無しさん
22/02/07 15:46:58.65 zWOfGBGY0.net
C#を独学で勉強したいんですが何から手をつけたら良いでしょうか
言語はシェルやvbaはできます、Pythonもちょっとだけ

58:デフォルトの名無しさん
22/02/07 15:56:11.87 ZbbRMlPga.net
なんでc#やりたくなったのか思い出してそのやりたかったことをどうやったらできるかぐぐってやればいい
とりあえずvsインストールしてさっさと始めろ
考えたり人に聞くよりもまずは手動かせ

59:デフォルトの名無しさん
22/02/07 16:05:15.62 zWOfGBGY0.net
C#ってvisualstudioのインストールだけで出来るの?
PythonみたいにC#自体はインストール不要なん?

60:デフォルトの名無しさん
22/02/07 16:11:45.01 ZbbRMlPga.net
vsのインストーラー起動したらc#をインストールするかどうかチェックするところがある
とりあえずやってみりゃ分かる

61:デフォルトの名無しさん
22/02/07 16:17:47.79 zWOfGBGY0.net
なるほど、ありがとうございます
ちなみにやりたいと思った理由はなんとなくの思いつきです

62:デフォルトの名無しさん
22/02/07 17:33:25.04 CWmTnMKY0.net
最初に画面作る→コード作る
勝手にコード作るから書き換えるときリファクタリングでちゃんとなおさないと
ボタンとの連携が外れたりしてだるい

63:デフォルトの名無しさん
22/02/11 20:18:35.80 Wnuvjl9G0.net
C#EntityFrameworkでテーブルの有無をチェックする方法ってありますか?
今はDbSet<Entity>のFirst()で例外が出たら、で仮チェックしてます
SQL文で書けば良いと言われればそれまでですが、それとは別にLINQや
DbSet<Entity>.Where(x => x.~ = Id);
みたいな方法でチェックする事はできるのでしょうか?

64:デフォルトの名無しさん
22/02/11 20:31:49.53 kVpyHF8c0.net
わいならSELECT文書くな

65:デフォルトの名無しさん
22/02/11 20:38:37.22 dtTIM78z0.net
Dictionary<string, Func<T, TRESULT>>
みたいな事をやりたいのですが
どう書くのが正解でしょうか?

66:デフォルトの名無しさん
22/02/11 20:57:51.73 vdb8lbDWa.net
適当な関数宣言をもったinterface作って、それ派生のclassで実装して
dictionary<string, interfacename>?

67:デフォルトの名無しさん
22/02/11 21:24:52.36 Wnuvjl9G0.net
適当だが書き方の話なら
どこかに書く
bool func(int n) { if (n <= 3) { return true; } else { return false; } }
var a = new Dictionary<string, Func<int, bool>>();
a.Add("test2", func);
bool b2_t1 = a["test2"](1);
bool b2_t3 = a["test2"](3);
bool b2_f5 = a["test2"](5);
ラムダ
a.Add("test1", x => { if (x == 1) { return true; } else { return false; } });
bool b_t1 = a["test1"](1);
bool b_f3 = a["test1"](3);
bool b_f5 = a["test1"](5);
Funcを加工するなら>>66のようにinterface、他オブジェクト型とか識別子渡して型チェックとか?

68:デフォルトの名無しさん
22/02/11 21:26:42.58 Wnuvjl9G0.net
>>64ありがとうございます
SELECT ~ FROM ~やOBJECT_IDのべた書きって事ですよね
それしかないんかな

69:デフォルトの名無しさん
22/02/11 22:10:25.35 dtTIM78z0.net
>>66,67
すみませんありがとうございます
Tが色々な型のFuncを登録したいのですがinterfaceの書き方がわかりません

70:デフォルトの名無しさん
22/02/11 22:17:26.15 w2aWSXHv0.net
そもそもなぜテーブルがないとかいう状態になるのか
その設計を見直したほうが良いんじゃね

71:デフォルトの名無しさん
22/02/11 22:20:58.05 kVpyHF8c0.net
あれだろ、ワークテーブルがもし存在したら消したりとか
年度でテーブルを分けたいとかわけわからんこと言われたりとか
そういう用途だろ

72:デフォルトの名無しさん
22/02/11 22:26:34.03 vdb8lbDWa.net
>>69
実際どんなのが欲しいのか知らないけどこんな感じでいいんじゃないの?
interface aaa
{
TRESULT bbb<T, TRESULT>(T n);
}
class AAA : aaa
{
public TRESULT bbb<T, TRESULT>(T n)
{
throw new NotImplementedException();
}
}

73:デフォルトの名無しさん
22/02/11 22:30:29.44 Wu/zW80b0.net
>>69
欲しいのは本当にinterfaceか?って疑問が出るが
ジェネリクスinterfaceの定義方法は(System.Collections.Generic.)IEnumerableの定義を見に行けばなんとなく分かるとは思う
あとinterfaceはinterfaceからしか継承できない
>>65の書き方だとジェネリクスclassになりそう

74:デフォルトの名無しさん
22/02/11 22:34:33.50 w2aWSXHv0.net
Dictionary<string, Func<object, object>>ではだめなのか

75:デフォルトの名無しさん
22/02/12 08:20:21.64 X2Srr7cu0.net
>>64
それが1番分かりやすくて単純だ

76:デフォルトの名無しさん
22/02/12 17:09:02.11 HCWO3i2I0.net
.net 6で、DataGridViewにDataSourceをバインドして表示する時、
データ量が多い(約24万レコード)と一時的に応答なしになります。
※データ取得は別スレッドで行っています。
サブフォームで表示しており、処理中はメインフォームも応答なしになりますが、
メインフォームとサブフォームを別スレッドにするみたいなのは無理ですか?

77:デフォルトの名無しさん
22/02/12 17:25:09.00 XcSi1DQ3a.net
VirtualMode=true
にする。その他もろもろ処理加える必要あるからぐぐれ

78:デフォルトの名無しさん
22/02/12 18:34:31.92 X2Srr7cu0.net
>>76
>>77が言ってるように仮想モードを使うんだよ。グリッドで見えてる部分だけを読み込む。
サンプルコードがMSDNのサイトにあるから頑張って実装してくれ。

79:デフォルトの名無しさん
22/02/12 21:15:10.31 wWgyF7+Aa.net
窓を閉じたときに
MethodInvokerの中の処理がまだ実行中で例外出すんだけど
停止させるか完了するまでフォームの廃棄を待つ方法は無いの?

80:デフォルトの名無しさん
22/02/12 21:27:27.68 C+pjCsCl0.net
一旦FormClosingでキャンセルしたあと完了してから改めてCloseする

81:デフォルトの名無しさん
22/02/13 12:57:34.90 5Mv4IyiB0.net
>>69
Genericだとコンパイル時点で型決定する必要があるから、色々な型に対応させたいとかなると
>>74が言ってるみたいにobjectにするか、dynamicにでもするしかない

82:デフォルトの名無しさん
22/02/13 14:18:56.36 3OIdnfKh0.net
>>81
嘘教えんな
ジェネリクス定義側はFunc<T, TResult>みたいにコンパイルに型決まってないだろうが
Func<object, object> とかいうクソみたいな型を使わせようとするな

83:デフォルトの名無しさん
22/02/13 14:35:33.11 TxpWrVyK0.net
dic.Add("a", (int a) => a * 2);
dic.Add("b", (string b) => b + b);
をやりたいって質問であるという想定なんでしょ?

84:デフォルトの名無しさん
22/02/13 14:40:02.85 5Mv4IyiB0.net
>>82
なら出来るやり方言ってみろよ

85:デフォルトの名無しさん
22/02/13 14:40:38.46 3OIdnfKh0.net
いろんな型のFuncを受け付けるようにするならそれ用のclassを作ってしまった方が手っ取り早い
public class MyDictinary<T, TResult> : Dictinary<string, Func<T, TResult>{...}
Funcをなんでも受け付けるようにするなら
public class MyDictinary<TDelegate> : Dictinary<string, Func<T, TResult> where TDelegate: Delegate {...}
どうしてもinterfaceにしなくちゃいけないなら
public interface IMyDictinary<T, TResult> : IDictinary<string, Func<T, TResult>{...}

ごちゃ混ぜのFuncを受け付けるようにするとFunc呼び出し時に大変な思いをするだけだからやらん方がいい

86:デフォルトの名無しさん
22/02/13 14:46:43.73 ifSJDHUhM.net

>>69はDictionaryいっこにいろんな引数型/戻り値のFuncを入れたいと言ってるみたいだから>>81しかないと思うんだけど・・・
引数型/戻り値型毎に別々のDictionaryにするだけなら、たとえば
var dic1 = new Dictionary<string,Func<int, string>>();
var dic2 = new Dictionary<string,Func<int, int>>();
var dic3 = new Dictionary<string,Func<string, string>>();
みたいにT/TResultの組み合わせに応じて別変数にするだけで解決するような・・?
なんでわざわざ>>85みたいなclassなりinterfaceなりを作る必要があるのかわからない

87:デフォルトの名無しさん
22/02/13 14:48:17.51 5Mv4IyiB0.net
>>85
それで違う型の引数のdelegateどうやって突っ込むつもりだ?
アホなのか

88:デフォルトの名無しさん
22/02/13 14:54:01.04 3OIdnfKh0.net
マジで1つのインスタンスに別の型のdelegateが入ればなんでもいい前提なん?
取り出して呼び出すときに引数/返り値型調べないといけないが

89:デフォルトの名無しさん
22/02/13 14:56:56.20 +oV/29aBd.net
DynamicInvoke使えばいい

90:デフォルトの名無しさん
22/02/13 15:19:09.62 ifSJDHUhM.net
ていうか>>85ってコンパイル通る?
「>」ひとつ付け忘れとかDictionaryのミススペルはともかくとして、
2つめの書き方でT/TResultの型はどこから決まるんだろう?
それとも
public class MyDictinary<TDelegate> : Dictionary<string, TDelegate> where TDelegate: Delegate { }
を意図してるのだろうか
Func<object, object>をクソと言ってるからには引数1つの制約すらつかなくなるこんなクソ以下の書き方を意図してるとも思えないけど・・・

91:デフォルトの名無しさん
22/02/13 15:28:36.94 5Mv4IyiB0.net
そもそも、そのDictionary使って何したいかまでは知らんから
それを言えば、もう少しマシな案なりが出てくるとは思うが

92:デフォルトの名無しさん
22/02/13 15:30:03.46 3OIdnfKh0.net
>>90
携帯からやったから酷いミスしてるのは悪かった
T/TResultの型を決めないならって意図で書いてる
当然Func<object, object>と同じで使うときに酷い目に遭うが
Func<object, object> だと引数型がobjectを受け付けないといけない縛りができるから
「いろんな関数を受け付ける」という要件を満たせない
Delegateだとその縛りはなくなる
ラムダを受け付けられなくなるが

93:デフォルトの名無しさん
22/02/13 15:34:09.27 Igq9caCG0.net
質問者は
1つのDictionaryの中に異なる型を混在させたいという話をしてるのか
1つのDictionaryの中は同じ型のみ入るが、型が異なる複数のDictionaryをジェネリックで統一して扱いたいという話をしてるのか
前者ならジェネリックを使うケースではなさそう

94:デフォルトの名無しさん
22/02/13 16:07:38.09 5Mv4IyiB0.net
単純なインターフェース使う例だとこんなもんかな
受け取る結果の型が決まってるなら、dynamic使わんで済むけど
public interface IJob
{
dynamic Run();
}
public class SomeJob<T1, T2> : IJob
{
public T1 Param1 {get;}
public T2 Param2 {get;}
public SomeJob(T1 param1, T2 param2)
{
Param1 = param1;
Param2 = param2;
}
public dynamic Run() => (dynamic)Param1 + (dynamic)Param2;
}
public static void Main()
{
var dic = new Dictionary<string, IJob>()
{
{"a", new SomeJob<int, double>(2, 3.3) },
{"b", new SomeJob<float, double>(5.5f, 16.612340) },
};
Console.WriteLine(dic["a"].Run());
Console.WriteLine(dic["b"].Run());
}

95:デフォルトの名無しさん
22/02/13 16:11:15.84 5Mv4IyiB0.net
SomeJobをジェネリックにしたけど、別にIJobを実装したクラス個別に作っても構わない

96:デフォルトの名無しさん
22/02/13 17:02:55.32 7+Po28QvM.net
わざわざinterfaceを定義する意味がわからん
たぶん>>94はdynamic型にキャストしたデリゲートを直接呼び出せることを知らないんだろう

97:デフォルトの名無しさん
22/02/13 17:24:19.17 5Mv4IyiB0.net
さすがにそれは判るわw
>>69でinterfaceが判らんって書いてるからサンプルで出しただけ

98:デフォルトの名無しさん
22/02/13 17:47:23.01 DvSkIP620.net
別にインターフェイスを使いたいってわけじゃないだろ
var dic = new Dictionary<string, Delegate>();
Func<int, int> f1 = (i => i + 1);
Func<string, string> f2 = (s => s + "さん");
dic.Add("1", f1);
dic.Add("2", f2);
Console.WriteLine(dic["1"].DynamicInvoke(2));
Console.WriteLine(dic["2"].DynamicInvoke("名無し"));
これでいいんじゃないか

99:デフォルトの名無しさん
22/02/13 19:33:32.60 gSu1aBn10.net
>>98
なんかすげーなまじで
仕事で使ってるだけのわいには到底思いつかんわ
しかしこれなんか業務で使える場面あるん?

100:デフォルトの名無しさん
22/02/13 19:55:15.91 DvSkIP620.net
>>99
本当は何がやりたいかは知らんわ
>Dictionary<string, Func<T, TRESULT>>
>みたいな事をやりたいのですが
って話だからな

101:デフォルトの名無しさん
22/02/13 20:48:10.88 7zxfmdEw0.net
本当にやりたいことを突き詰めるとそんな面倒なことをしなくてもよい解決方法があったりするのはよくある事よな
今回の件でも当てはまるかどうかは知らんけど

102:デフォルトの名無しさん
22/02/15 12:56:44.30 XMXX+kQj0.net
例えばFFMPEGをC#で起動させてるときに
エンコード処理みたいな定期的に値が返ってくるやつって
別スレッドでFFMPEGを走らせて
本スレッドではテキストボックスあたりに出力するようにしたいんだけど
これってFFMPEGの処理が終わるまでメインスレッドはwaitしないとダメってことですよね?
単独スレッドで終了した結果は表示できるんですけど

103:デフォルトの名無しさん
22/02/15 13:01:30.90 XQ5fPZCEa.net
そんなことはない
別スレッドで読みだした値をメインスレッドに送って、メインスレッドでその値を表示すればいい
別スレッドからUIに表示しようとしたらエラーになる

104:デフォルトの名無しさん
22/02/15 17:00:40.59 /St4XHrW0.net
>>102
本スレッドのTextBox.TextにInvoke使って書き込むんだよ

105:デフォルトの名無しさん
22/02/15 19:16:59.08 jLK4fSzed.net
たぶんGUIアプリ作ってるんだろうけど
GUIのデータはメインスレッドしか書き換えちゃダメなルールがある
TextBox.Invokeでメインスレッドに自分のデータ変えてくれってお願いするか、
WPFのBindingならメインスレッドがデータ持ってないからデータ取りに来いってできたりする

106:デフォルトの名無しさん
22/02/15 19:24:23.63 IqKJXua+0.net
今のc#はスレッドを安易に使えるがスレッドには深い闇がある。

107:名無し募集中。。。
22/02/20 04:59:16.93 gLgXgTw20.net
c#ってvisual studio でテストする時って
アプリの前回値みたいの記憶できないの?
〇〇フォルダのパスとか記憶したいんだけど

108:デフォルトの名無しさん
22/02/20 05:45:33.44 9eA/EulNH.net
Windows上だと何日動かしてもメモリ使用量40MBくらいで安定してるプログラムが
(VS2002の診断ツールで確認)
ラズパイのMono上だと徐々にメモリ使用量が増え続けて
1日くらいで4GB到達して落ちるんだけど何故だろう

109:デフォルトの名無しさん
22/02/20 08:10:15.15 k8LvFvhxa.net
タイマーかなんか仕掛けて手動で↓を呼ぶ
GC.Collect(2, GCCollectionMode.Forced, false, true);
それで減らないならMonoのランタイムがそもそもUNCOと思われ。
Unity Profilerで表示されるMonoで使用メモリ量が膨大になってしまう
URLリンク(teratail.com)

110:デフォルトの名無しさん
22/02/20 08:11:50.49 /uCWXFvO0.net
VS2002?

111:デフォルトの名無しさん
22/02/20 15:59:54.94 gLgXgTw20.net
dataGridView の中のリストの大きさってどうやって変えるの?
枠の大きさは変えられるんだけど
中のリストだけ小さいままでこまってる

112:デフォルトの名無しさん
22/02/20 23:16:48.82 ppLUrwgj0.net
中のリストという意味がちょっと判らない、列や行の幅の事?
名前にWidthとかHeightが含まれるプロパティ片っ端から弄ってみたら

113:デフォルトの名無しさん
22/02/21 19:22:27.56 4hCK79/5a.net
var form = new Form(){
 Text = "たいとる"
 FormBorderStyle = FormBorderStyle.FixedDialog
};
みたいに書けるやつ
一見VBのwith文っぽいけどプロパティの代入行為しかできなくて中途半端

114:デフォルトの名無しさん
22/02/22 10:14:36.95 Q9cfD2FD0.net
そら、初期化のために用意されているものなんだからそういうもんだろ

115:デフォルトの名無しさん
22/02/22 13:36:13.33 j1m5S7Tk0.net
オブジェクト初期化子って名前を知らないとwith的なもんかと思ってしまうのかも知れないね

116:デフォルトの名無しさん
22/02/22 15:45:45.85 vNlU0s1vM.net
VBのWith文読み難いから出来んでいい

117:デフォルトの名無しさん
22/02/22 15:53:33.83 PEuqNSu60.net
vb.netのオブジェクト初期化子はWithなんだよね。
冗長だ。

118:デフォルトの名無しさん
22/02/22 16:15:23.63 gr38xJ4ba.net
c#のは同じような書き方でも意味が変わって一貫性のようなものがない(ように一見思える)
var form = new Form()
{Text = Text};
form.click += delegate
{Text=Text;};
vbのは普通の命令としてもwithがあり、そこに囲まれてる変数の頭にピリオドを付けるという書き方の一貫性のようなものがあるからな
どっちが初心者に優しいかと言えば今でもvbと感じる(vbがいい


119:とは言ってない)



120:デフォルトの名無しさん
22/02/23 12:07:24.23 n7YEN9KD0.net
フレームワークの話でしょうが、フォームアプリでモーダルフォームの外を
クリックした時に、モーダルフォームを閉じる事って出来るでしょうか?
スマホのUIによくある挙動ですが、同等の動きを実現出来ないかなと。

121:119
22/02/23 12:10:24.55 n7YEN9KD0.net
初心者板の内容でした。
失礼しました。

122:デフォルトの名無しさん
22/02/23 12:26:47.20 n4QLtIZ70.net
薄毛や抜け毛にお悩みなら、発毛専門の*****へ。
一人ひとりの薄毛・脱毛原因を正確に突き止め、その原因を解消する独自の発毛システムを提供しています。

123:デフォルトの名無しさん
22/02/23 19:02:33.81 wKfqGXJ00.net
たぶん画面全体に、透明のレイヤーでも貼るのだろう
それで、そのレイヤーがクリックイベントを受け取れる

124:デフォルトの名無しさん
22/02/23 20:18:19.67 Mz9SDh4V0.net
すいません 教えてください
文字列変数の中に 変数をしてしておいて 実行時に指定する方法ありますか?
例:
目覚まし時計プログラムで
9:00の時
9:00になりました。 おはようございます。
12時の時
お昼です 12:00になりました。
って 入れ替えたいのだけど
$Time になりました。おはようございます。
12時の時の文字列は
お昼になりました$Timeになりました。
って指定しておき $Timeをあとから指定したいみたいな方法です。

125:デフォルトの名無しさん
22/02/23 20:28:47.29 RBoSgh/A0.net
Replace("$Time", "12:00")

126:デフォルトの名無しさん
22/02/23 20:56:09.29 77XR+UNq0.net
>>123
お望みなのは、文字列補間?
string a="かきくけこ";
Console.WrightLine($"あいうえお { a } さしすせそ");

127:デフォルトの名無しさん
22/02/23 21:57:54.53 6Rc20OyP0.net
埋め込む文章も変えたいみたいだから
DateTimeによって適したフォーマット用文字列を返すようにして、その後string.Format()するとか

128:デフォルトの名無しさん
22/02/24 06:20:18.96 1wBDmGBO0.net
>>122
Webじゃないから難しいかな

129:デフォルトの名無しさん
22/02/24 10:51:32.90 N/yjILul0.net
>>119
フックしちゃうのは?
URLリンク(www.artistics.co.jp)

130:デフォルトの名無しさん
22/02/24 21:50:55.08 G5PhgONP0.net
>>119
Deactivateイベントで拾えないか?

131:デフォルトの名無しさん
22/02/24 22:02:34.13 eVS3l/k90.net
>>126 ありがとうございます。
一つ進化しました。
求めているのは、 126みたいな感じです。

132:デフォルトの名無しさん
22/02/25 14:06:14.20 Eg3DloqN0.net
Ruby on Rails では、ERB(Embedded Ruby)で、何の文書にも、Rubyのコード片を埋め込める
例えば、a.rb 内で、ary = [ "a", "b" ]
と定義して、ERB のresult( binding )で、
この文脈を他のファイルへ、バインドできる
b.html.erb 内で、<% ~ %>, <%= ~ %> を使って、Rubyのコード片を埋め込む
<% ary.each do | elem | %>
<p><%=h elem %></p>
<% end %>
出力ファイル、b.html
<p>a</p>
<p>b</p>
他にも、カスタムフォーマットを自作して、その形式を日本語辞書に登録して、呼び出せる
ja:
time:
formats:
medium: "%Y年%m月%d日 (%a) %H:%M"
と定義したら、b.html.erb 内で、
<%=l( Time.current, format: :medium ) %>
と書くと、
出力ファイル、b.html
2022年02月25日 (金) 13:55
まあ、コミュニティーが配布している日本語辞書に、
最初から、幾つかの形式が登録されているから、自作する事は少ない

133:デフォルトの名無しさん
22/02/25 15:06:52.58 8px/N21n0.net
Rubyって使ったことなかったけど、
それAsp.netにそっくりやね

134:デフォルトの名無しさん
22/03/01 13:52:40.14 4BvRS+UW0.net
Console.writeline()はスレッドセーフでないというのは本当でしょうか?
今までシングルスレッドで動いていたプログラムを一部の処理だけマルチスレッドで動作するように変更中です
Console.writeline()の呼び出し箇所を全て変更する必要がありますか?

135:デフォルトの名無しさん
22/03/01 13:56:54.75 VTZdDdWR0.net
スレッドセーフです

136:デフォルトの名無しさん
22/03/01 20:21:42.35 OUtPpYxS0.net
URLリンク(docs.microsoft.com)

137:デフォルトの名無しさん
22/03/01 23:40:13.90 wsOShTVj0.net
この方は スレッガー ロウ です

138:デフォルトの名無しさん
22/03/15 17:49:18.74 uT8cdwkS0.net
相談させてください。
IntPtr を ref int に変換するために以下のようなコードを書くと、期待通り False と表示されます。
IntPtr ptr = Marshal.AllocCoTaskMem(4);
ref int x = ref Unsafe.AddByteOffset(ref Unsafe.NullRef<int>(), ptr);
Console.WriteLine(Unsafe.IsNullRef(ref x)); // False と表示される
Marshal.FreeCoTaskMem(ptr);
しかし、以下のように意味のない for 文を追加すると、コードの最適化が有効な場合のみ True と表示されます。
for (int i = 0; i < 0; i++) { } // 意味のない for 文
IntPtr ptr = Marshal.AllocCoTaskMem(4);
ref int x = ref Unsafe.AddByteOffset(ref Unsafe.NullRef<int>(), ptr);
Console.WriteLine(Unsafe.IsNullRef(ref x)); // 最適化が有効な場合のみ True と表示される
Marshal.FreeCoTaskMem(ptr);
ただし、意味のない for 文があっても
Unsafe.AddByteOffset(ref Unsafe.NullRef<int>(), ptr)
→ Unsafe.SubtractByteOffset(ref Unsafe.NullRef<int>(), -(nint)ptr)
のように書き換えると常に False と表示されるようになります。
なぜこのようなことが起こるのかさっぱり見当がつかないので、お知恵を拝借できないでしょうか。
私の環境を分かる範囲で書くと以下のとおりですが、他に何か必要な情報があればお教えください。
Windows 10 Pro (21H2)
Microsoft Visual Studio Community 2022 (64 ビット) Version 17.1.1
コンソール アプリケーション、.NET 6.0
どうぞよろしくお願いいたします。

139:デフォルトの名無しさん
22/03/15 18:02:33.05 LD6RLXEha.net
一行目しか見てないけど、これはいいのか?(8)かもよ
IntPtr ptr = Marshal.AllocCoTaskMem(4);

140:デフォルトの名無しさん
22/03/15 18:57:03.19 BlmPXv890.net
そもそも現在のポインタ値がヌル参照からのオフセットだって保証されてるのか?

141:デフォルトの名無しさん
22/03/15 18:59:03.73 1RknuKaK0.net
for文に意味があるからじゃないかな

142:デフォルトの名無しさん
22/03/15 20:05:41.25 NI5jmOXt0.net
最適化でなんか情報が消し飛んでるんだと思うけど、判らんな
[MethodImpl(MethodImplOptions.NoInlining)]
public static ref T AddByteOffset<T>(ref T reference, IntPtr offset)
=> ref Unsafe.AddByteOffset(ref reference, offset);
とかやってインライン展開抑制してみたら

143:デフォルトの名無しさん
22/03/15 21:00:09.00 ZTE9InWz0.net
>>137
JIT最適化を抑制せずF11でデバッグして逆アセンブルすると
先にConsole.WriteLine(Boolean)がTrue固定で呼び出されて
その後に


144:Marshal.IsNullOrWin32Atom(IntPtr)となってるね 未定義動作はタイムトラベルを…彷彿とさせるがC#なんだよなぁ MSIL的にも&とnative intの結果型は&に定められている筈だし とはいえ、管理下ポインタはnullになりえないとか有った気もするし null参照への演算が未定義なら道理なのかもしれない、あるいはバグか



145:デフォルトの名無しさん
22/03/15 21:23:35.68 uT8cdwkS0.net
皆様、返信どうもありがとうございます。
いただいたアドバイスを元に色々と確認をしていて反応が遅くなってしまいました。
申し訳ありません。
>>138
確認してみた所、C# では int は 32 ビットと決められているようです。
URLリンク(docs.microsoft.com)
ただ、可読性を考えると 4 ではなく sizeof(int) と書くべきでした。
ご指摘どうもありがとうございました。
>>139
Unsafe.NullRef<T>() と Marshal.ReadInt32(int) の実装を確認してみたところ、
おそらくその点は問題ないかと思います。
URLリンク(github.com)
URLリンク(github.com)
しかし、問題の原因は大抵こういう思い込みに隠れているものだと思うので、
可能性を一つ潰すことができてとても助かりました。
>>140
そうなんですよね。
for (int i = 0; i < 0; i++) {} は i++ に到達しないのは明らかだから
最適化でまるっと消えてしまうかと思っていたので、この結果には驚きました。
>>141
書いていただいたコードを試してみたところ、確かに最適化が有効でも期待通りの動作になりました。
それからもう一つ、書いていただいたコードを使わない場合、
プラットフォームが x86 と x64 の両方とも最適化有効時には期待通りの動作をしないことが分かりました。
(x86 の場合は常に期待通りに動作するならば問題の原因について一つ仮説が立てられるかと思ったのですが、
 実際は違っていたので未だに原因はさっぱり見当がついていません…)

146:デフォルトの名無しさん
22/03/15 21:24:27.40 uT8cdwkS0.net
>>142
null参照への演算が未定義というのは、AddByteOffset メソッド内の話でしょうか。
下記のページの AddByteOffset<T>(ref T, IntPtr) のところをみると
ldarg.0
ldarg.1
add
ret
とコメントされていて、少なくとも IL 的には一つ目の引数が null でも特に問題はないように思えてしまいます。
IL 的に問題がないかどうかは私は自信がないのですが、
もし IL に問題がないのに JIT 最適化で問題が起きてしまうとすれば、
バグと考えてもよいのでしょうか。
参考
URLリンク(github.com)

147:デフォルトの名無しさん
22/03/15 21:29:32.78 NI5jmOXt0.net
issue検索して無かったら、一応報告しといたほうがいいかもしらんね

148:デフォルトの名無しさん
22/03/15 21:33:53.42 NI5jmOXt0.net
[Intrinsic]
がついてるメソッドは、Release時に特殊な最適化が走ってる筈なんだけど
それが誤動作するケースがあるのかもしらん(あくまで想像)

149:142
22/03/15 21:41:55.33 ZTE9InWz0.net
あー同じような判定コードを読み間違えた
タイムトラベルは起きてないけど、代入もヌル判定もなくなってる感じかな
>>144
そう、片方が0なら実質意味はないから加算命令が現れなくても不思議ではないけど
Console.WriteLine(x);としてみても固定アドレス0をデリファレンスするので
xが常にぬるぽ扱いになってしまっている様ではある
C#的には未定義なら未定義でビルド時か実行時にエラーを出しそうだけど
Unsafeでチェックされないのか判断に困る。さもなければ最適化のバグだと思う

150:デフォルトの名無しさん
22/03/15 22:00:29.13 RZxqxi620.net
winforms
dbの値は、dataset . datatable以外で、どうやって取得するの? list?

151:デフォルトの名無しさん
22/03/15 22:07:11.34 uT8cdwkS0.net
>>145
そうですね。アドバイスありがとうございます。
私はこれまでこの手の問題は「まずは自分を疑え」と教わってきて
実際それで大抵の問題は解決してきたのですが、
皆様のお話をうかがうに、今回は自分の勘違いではなく
よそに原因があると考えたほうがいいのかもしれません。
これまで報告等は経験がないのですが、
それも視野に入れて調べてみたいと思います。
>>146
勉強になります。
その特殊な最適化で結果が変わることがバグなのか
私の力では判断が難しそうなのが歯がゆいところです。
>>147
> そう、片方が0なら実質意味はないから加算命令が現れなくても不思議ではないけど
> Console.WriteLine(x);としてみても固定アドレス0をデリファレンスするので
私の理解不足で、
「片方が0なら実質意味はない」 ← 0 + p の計算は必要ない?そりゃそうだ!
「固定アドレス0をデリファレンスする」 ← 0 + p = 0 ということ?p ではなくて?
という感想を持ってしまいました。
申し訳ないのですが、もしよろしければもう少し詳しく説明していただけないでしょうか。
> C#的には未定義なら未定義でビルド時か実行時にエラーを出しそうだけど
> Unsafeでチェックされないのか判断に困る。さもなければ最適化のバグだと思う
ご意見どうもありがとうございます。とても共感させていただきました。
未定義であればこそデバッグ時に教えてほしいものですが、
実際にはデバッグ時には期待通りに動作してしまうのが厄介なところです。

152:デフォルトの名無しさん
22/03/15 22:26:59.94 NI5jmOXt0.net
>>148
DataReaderで読むとか、EntityFrameworkやDapperみたいなフレームワーク使うとか

153:デフォルトの名無しさん
22/03/15 22:47:23.94 BlmPXv890.net
そもそも値型にたいするヌル参照が未定義な気がするが
最適化で数値ゼロとヌル参照が同一視されてるとか?

154:デフォルトの名無しさん
22/03/15 23:25:37.07 ZTE9InWz0.net
>>149
件の部分はJITコンパイルされたマシンコードの話で、ref intを参照する際に
xからでなくても「mov ecx, dword ptr [ptr]」的であっても整合性は取れるが
逆アセが「mov ecx, dword ptr [0]」になるので、xはnullにされてるという話
それならばIsNullRefが消えるのは順当としても、xがnullになる代入の欠落が
NullRef<int>が宜しくないのか、それをAddByteOffsetに与えるのがダメなのか
単なるバグか…、Unsafe.AsRefに直接IntPtr渡せれば/unsafeとせず済むのにね

155:デフォルトの名無しさん
22/03/16 00:04:15.38 pAqxvPky0.net
>>151
なるほど…。
ただ、Unsafe.IsNullRef(ref Unsafe.NullRef<int>()) と書けてこれが true を返すので、
値型に対するヌル参照が定められていない場合は Unsafe.NullRef<T> の T に int が
指定できること自体がバグということになってしまうような気もします。
一応未定義ではないけど、CLR 外部との相互利用等で必要に迫られない限り
使ってくれるなという感じなのでしょうか。
>>152
ご親切に説明していただきどうもありがとうございます。
逆アセンブルの結果に “なぜだか理由は分からないが” 0 になっている部分があって、
そこから x が null にされているというという事実が読み取れる、ということですね。
(まだ間違っていたら大変申し訳ありません)
> NullRef<int>が宜しくないのか、それをAddByteOffsetに与えるのがダメなのか
NullRef<T> と AddByteOffset<T> のソースコードのコメントにはそれぞれ
ldc.i4.0
conv.u
ret
ldarg.0
ldarg.1
add
ret
とあって、これを見る限り、NullRef<int>() を AddByteOffset<int> に与えることの問題は
私には読み取れませんでした。
(そもそもこの問題で IL を持ち出すこと自体が見当外れなのでしょうか)
もちろん、実際には特殊な JIT 最適化が行われているのでしょうが、
その結果 IL から期待される動作と変わってしまうようなら、
やはりバグとして報告したほうがよいのかなというのが今のところの考えです。

156:デフォルトの名無しさん
22/03/16 00:10:04.98 pAqxvPky0.net
>>152
> Unsafe.AsRefに直接IntPtr渡せれば/unsafeとせず済むのにね
そうなんです!というか、本来私がしたいことからいうと
MemoryMarshal.CreateSpan<int> メソッドに IntPtr 型を渡せると一番よいのですが、
それができないのでこのメソッドが受け付けてくれる ref int を作るという方向で考えています。

157:デフォルトの名無しさん
22/03/16 01:45:02.44 lykY2TTP0.net
>>153-154
仰る通りです
ECMA-335の文言"Managed pointers cannot be null"で検索してみたら案の定ツッコミありましたが
URLリンク(github.com)
これを受けてか、トップのNullRef<T>()に関する注釈にも
(10) Per ECMA-335, Sec. II.14.4.2, it is not strictly legal for a gcref to point to null.
However, all .NET runtimes allow this and treat it in a type-safe fashion,
including guarding accesses to null gcrefs by throwing NullReferenceException as appropriate.
と書かれていて問題なさそうな見解です
仕様に準拠していないというのは…JITコンパイラ的にどうなのか
言及を忘れていましたが、アセンブリにコード欠落は見受けられないのでC#コンパイラの問題ではないし
AddByteOffset<T>(ref T, IntPtr)にしても関連する注釈は
(1) Arithmetic operations on gcrefs (such as via Unsafe.Add) are not checked for correctness by the runtime.
The resulting gcref may point to invalid memory or to a different object. See ECMA-335, Sec. III.1.5.
のみですし、また前項と合わせてECMA-335が示されていますから、ILと無関係でもないでしょう
System.Runtime.CompilerServices.Unsafe.dllをデコンパイルしてみてもコメントと同じコードが示されます
Framework時代ならSafeBuffer継承とかやってましたが(SafeMemoryMappedViewHandleはコンストラクタがinternalなので)
これもこれで今見たら「SafeBuffer may be unavailable in future releases.」で笑えぬ

158:デフォルトの名無しさん
22/03/16 02:59:05.97 b5JRB2Cp0.net
最近の標準ライブラリの実装を見るに、.NET開発チームはIntPtrを使わせたくないように感じる
ポインタ弄るなら、あぶねー事やってんだから明確にunsafe宣言しろって事なんだろうな

159:デフォルトの名無しさん
22/03/16 15:09:58.97 lykY2TTP0.net
>>153
よくよく調べてみたらズバリそのものが有りました
URLリンク(github.com)
>>156で言われている様な主旨のコメントもありますね
元コードの添え書きを見るに意図されたものと見受けられますが
ぬるぽを多少オフセットした所でデリファンレスしたら一緒という事でしょうか
昨年の時点で修正が入っていますが、マイルストーンは7.0.0とされ6.0.3でも取りこまれていません
URLリンク(github.com)
.NET 7.0 Previewにはマージされており、その後さらに周辺コードはリファクタリングされ移動しています
URLリンク(github.com)


160:505 まぁやはり本来は相対オフセットが期待されるところですから 絶対オフセットではなく大人しくAsRefを使うべきなのかもしれません



161:137
22/03/16 16:49:39.25 TbbZbi5h0.net
すみません。規制にあってしまったのか、パソコンから書き込めなくなってしまいました。
この文章も書き込めるかどうか分かりませんが、
ひとまず、親切にしてくださった皆様に心からお礼申し上げます。

162:デフォルトの名無しさん
22/03/16 18:13:49.44 b5JRB2Cp0.net
>>157 のリンク先の、
> Sergio0694 commented on 13 Nov 2021
> Having fake "safe" code using APIs like this instead of properly using built-in unsafe syntax is objectively worse and should be avoided. It makes it harder to see when code is actually doing unsafe things. It effectively makes your code more unsafe. It's an ongoing problem that has been here forever, certainly not helped by the existence of some APIs (looking at you Marshal...).
このコメントに激しく同意するわ。
ポインタ操作やってるのに、Unsafeクラスで無理矢理unsafeブロック書くの回避したところで、
それは危険なコードである事に変わりはない。

163:デフォルトの名無しさん
22/03/16 19:44:50.55 Eqgki5Lk0.net
vs2022 c# winforms .net6
画面作って、vs再起動すると
フォームが読込エラーが発生する
おまえら、発生しないの?

164:デフォルトの名無しさん
22/03/16 19:53:52.54 KaTnXwmea.net
発生するぞw

165:デフォルトの名無しさん
22/03/16 20:33:39.98 paMiN66w0.net
>>160
タブオーダーの変更も無効化されててマジゴミ

166:デフォルトの名無しさん
22/03/16 20:40:08.63 DWqldl790.net
.NET framework 4.8は永遠に不滅です( ー`дー´)キリッ

167:デフォルトの名無しさん
22/03/16 21:36:45.42 b5JRB2Cp0.net
WindowsFormでやるなら、実際.NET framework安定だと思う
.NET5とか6でやるなら、他のUI選択した方がいい

168:デフォルトの名無しさん
22/03/26 10:57:27.94 klc4wM2MF.net
初心者ですまんが、async/awaitでtaskの実行とtask自体の生成の責務が分離されてない気がするんだが
asyncの中にはawaitがあるもの(ないと警告)という連鎖はどこで切ればいいの?
最終的にインフラまで行ったとしてそこのasyncメソッドはawaitするものがなくなってしまうよな?
末端は警告を無視するか、Task.Runとかを作ってTaskを返すかなりしろってこと?

169:デフォルトの名無しさん
22/03/26 11:26:01.00 opZhrmyVa.net
await hogesync();

_= hogesync();
これで警告連鎖から逃げれる

170:デフォルトの名無しさん
22/03/26 11:38:25.92 klc4wM2MF.net
>>166
いやそっちじゃなくCS1998の方
↓みたいなの
async Task hogeA {await hogeB();}
// 警告 CS1998
async Task hogeB{Console.WriteLine("hogeB");}

171:デフォルトの名無しさん
22/03/26 12:14:52.53 opZhrmyVa.net
asyncにする必要がないのはしなければいいだけ
async Task hogeB{Console.WriteLine("hogeB");}

void hogeB(){}
asincじゃないけど、hogeB();って呼び出せばawait hogeB();と意味は変わらない

172:デフォルトの名無しさん
22/03/26 12:22:02.66 sDWgty5NM.net
>>165
TaskCompletionSouece

173:デフォルトの名無しさん
22/03/26 12:30:11.96 sDWgty5NM.net
あと、インターフェースの都合でasyncだけど実装は非同期である必要がない場合には、Task.FromResultやValueTaskやCompletedTaskを使うとよい

174:デフォルトの名無しさん
22/03/26 12:40:15.39 pvkpV0Laa.net
>>168-170
サンクス
中身が同期やけど呼び出し元はそいつを非同期で待機したけりゃTask.Runとか使うしかないって事だよな
asyncの中身を同期だけにすると混乱を招きかねないけどawait可能なTaskを自動で作ってくれてスレッド復帰なんかも勝手にやってくれる分利点もありそうな気がするんだが
どうなんだろ
asyncじゃないTaskを返すメソッドを作る法がええんかも知れんけどめんどいよね

175:デフォルトの名無しさん
22/03/26 16:33:46.27 7Z9PIxRJr.net
違うんじゃね?
ある関数の内部処理で
状況によって同期の場合と非同期の場合に
スィッチする事は良くある

176:デフォルトの名無しさん
22/04/06 10:28:00.42 OCQcEzvM0.net
ご存知の方いらっしゃいましたら教えてください
StreamReader urlReader = new StreamReader(urlStream, Encoding.UTF8);
string urlReadString = urlReader.ReadLine();
上記の関数使ってcharset=UTF-8が設定されてるURLを読み込んだときに
普通にテキストとして読み込めるときと、UTF-8の読み込みに失敗してEF BF BDが出力されるときがあるけど、
失敗するときって何か初期設定が足りてない?
それともReadLine()じゃなくて別の関数を使う?

177:デフォルトの名無しさん
22/04/06 10:40:24.67 /2SYAuGyM.net
エンコーディング関係は、まず生バイトコードを確認しなさい

178:デフォルトの名無しさん
22/04/06 11:06:48.61 BAnc7YwEd.net
バイトコードでなくバイナリデータな
バイナリモードでファイル開いて読み込んで16進出力するか、
BZとかのバイナリエディタでファイルのバイナリを見るのがいい

179:デフォルトの名無しさん
22/04/06 12:14:51.33 XIBRKt28M.net
URL言うとるやん
UTF8EncodingクラスでBOMの有無指定出来るけど、結局バイトコード確認しないと判定出来ん

180:デフォルトの名無しさん
22/04/06 18:52:21.62 IJ3XlCfB0.net
ばいなり()

181:デフォルトの名無しさん
22/04/06 19:11:31.46 oIHs85Eca.net
バイナリであってるだろ。むしろバイトコードって使いかた初めて聞いたぞ
urlならその内容をファイルに落として開いて確認するのが楽
それが面倒な場合はコードからstreamをファイルに落として確認

182:デフォルトの名無しさん
22/04/06 19:15:36.12 aGcf2Kai0.net
ファイル落とさんでもVSで配列取得すればデバッグで確認できるやろ

183:デフォルトの名無しさん
22/04/06 19:26:15.02 oIHs85Eca.net
streamはデバッガで直接中身見れない(よな?)のと
(俺が使ってる外部バイナリエディタは)エンコーディング自動判別してくれるから俺にとってはファイルの方が楽
ほかの人にとってはわからないな

184:デフォルトの名無しさん
22/04/06 19:26:20.34 8tuXZutt0.net
EF BB BFってUTF-8のBOMだよね
detectEncodingFromByteOrderMarksの指定がある
詳しくはEncoding.GetPreambleで調べる

185:デフォルトの名無しさん
22/04/06 19:27:06.07 aGcf2Kai0.net
文字コードを判別する
URLリンク(dobon.net)
ReadJEnc C#(.NET)用ファイル文字コード種類自動判別ライブラリ
URLリンク(github.com)
このへんでいけるんじゃないかね

186:デフォルトの名無しさん
22/04/06 19:32:51.40 aGcf2Kai0.net
>>181
指定だけで自動判定出来るなら、そっちの方が楽そうね

187:デフォルトの名無しさん (ワッチョイ 6f24-soYJ)
22/04/11 20:16:43 2IiYezuY0.net
ソースジェネレーターってnetstandard2.0だからWinFormsは参照不可能?
ソースジェネレーター側で参照できずともまあ良いんだけど、出来ればWinFormsのいくつかのクラスからコンパイル時リフレクションで色々取り出したいのだが

188:デフォルトの名無しさん
22/04/11 20:33:51.13 M/snaKK00.net
ソースジェネレータで何を生成したいん?

189:デフォルトの名無しさん
22/04/13 17:04:49.00 5l1VnwO30.net
C#からPowserShellを実行して
登録済みのVPN一覧を取得しようとしています。
コマンド発行までは出来たのですが戻り値
Name ServerAddress の取得が出来ません。
どの様なコードを書けばよいでしょうか?
using (var invoker = new RunspaceInvoke())
{
var result = invoker.Invoke(source);
}
resultに値が入るハズなのですが・・・分かりません。
PowerShell上で実行するとVPN一覧が表示されています。

190:デフォルトの名無しさん
22/04/13 18:50:59.56 e0uLmTvD0.net
マルチ死ね

191:デフォルトの名無しさん
22/04/13 18:59:25.77 zw+GE19b0.net
>>186
グロ

192:デフォルトの名無しさん
22/04/13 19:26:25.04 nybfnzFR0.net
>>186
resultの中身をデバッガーで見てみなよ

193:デフォルトの名無しさん
22/04/13 19:52:25.67 5l1VnwO30.net
>>189
動的ビューというところに値がありました。
new Microsoft.CSharp.RuntimeBinder.DynamicMetaObjectProviderDebugView(result[0]).Items[24]

result[0]
BaseObject
ImmediateBaseObject
Members
Methods
Properties
TypeNames
本来であれば、この中のどこかに入ると思うのですが見つかりません。

194:デフォルトの名無しさん
22/04/13 20:53:24.06 zw+GE19b0.net
>>190
もう一方の方でも返信きてるぞ

195:デフォルトの名無しさん
22/04/13 23:57:25.49 5l1VnwO30.net
>>191
ありがとうございます。

196:デフォルトの名無しさん
22/04/18 12:25:35.83 UzqEtN9Q0.net
これはマルチのお手本

197:デフォルトの名無しさん
22/04/22 17:18:18.78 11YPP3hWa.net
内部クラスから外のprivateなenumの型を直接参照できるのはどうしてでしょうか?
public class A {
private enum ZZZ {a, b, c}
class B {
Console.Writeline("number = " + (int)ZZZ.a); // なぜenumだけこれが許されるのか
}}

198:デフォルトの名無しさん
22/04/22 17:20:58.21 QpAASndCM.net
enumだけが許されるわけではない

199:デフォルトの名無しさん
22/04/22 17:32:06.89 11YPP3hWa.net
よろしければそのルールについて学べるようなヒントとかキーワードを教えて頂けると助かります。

200:デフォルトの名無しさん
22/04/22 17:56:13.35 cNb4vicFa.net
privateはそこに含まれるのに対してアクセスおkって定義だからアクセスできる
URLリンク(docs.microsoft.com)

201:デフォルトの名無しさん
22/04/22 19:10:42.44 11YPP3hWa.net
ありがとうございます。enumが暗黙的にstaticなら都合がいいのでそういう事にします

202:デフォルトの名無しさん
22/04/22 19:17:02.27 X/HcvjX50.net
親のオブジェクトも取得できれば便利なのにな。

203:デフォルトの名無しさん
22/04/22 20:30:49.13 XRzGPZH0d.net
派生クラスとInnerクラスをごっちゃにするなよ?
外側のクラスのインスタンスさえ得られればprivateにアクセスし放題だったり

204:デフォルトの名無しさん
22/04/22 21:18:57.90 gmnEH6VvM.net
>>199
循環参照になるから…

205:デフォルトの名無しさん
22/04/25 12:56:21.20 zhSuRXyD0.net
xxxx.exeで
var args = Environment.GetCommandLineArgs()
のargs[0]が xxxx.dll だった・・・

206:デフォルトの名無しさん
22/04/29 23:05:58.93 ZxkWaM0v0.net
関数のエラーを表現するのってどういうのが一番C#のスタイルに合うんでしょうか
例えば公式のtryparseなんてbool返しますよね。でも例外投げるって手もありますよね。なんか職場の古いおっさんははるか昔のCのやり方そのまま0とか-1とか返してるし

207:デフォルトの名無しさん
22/04/29 23:18:22.51 Hw91ocej0.net
メソッド次第、エラー次第 これ一つでオールオッケーなんて物はない
って当たり前の答えにしかならないよ

208:デフォルトの名無しさん
22/04/29 23:19:40.25 oqakQFJca.net
普通はboolでいいよ
処理中断したいよってな想定外の失敗は例外

209:デフォルトの名無しさん
22/04/29 23:54:03.84 ojB4mgIH0.net
例外は重いからね

210:デフォルトの名無しさん
22/04/30 00:24:41.78 QtDBeglS0.net
>>203
> なんか職場の古いおっさんははるか昔のCのやり方そのまま0とか-1とか返してるし
Cでも定数か列挙体定義しろよってレベルだけどな

211:デフォルトの名無しさん
22/04/30 06:39:16.16 OR8SZm5l0.net
>>203
> 例えば公式のtryparseなんてbool返しますよね。でも例外投げるって手もありますよね。
だからTryParseとParseの両方あるでしょ
汎用性を求めるなら両方用意すればいいし特定の場合だけなら使いやすい方を用意すればいいと思うよ

212:デフォルトの名無しさん
22/04/30 07:00:58.78 OalUk2/jM.net
「エラー」を表すなら例外一択
そうするとtryブロック内に書かれている処理は正常系だけ、catchブロック内が異常系だけになって
ソースコードが明瞭になるし異常系ロジックをcatchの1か所に集約できる
こういう書き方に慣れるといちいち1処理行うごとに戻り値if分岐してるような書き方のダサさが分かる
例外が重いってのもたしかにその通りなんだけどまあ1回こっきり投げるだけなら許容範囲かな

213:デフォルトの名無しさん
22/04/30 07:37:56.60 3TsZhUq60.net
>>203
C流儀のintは成功が0だからboolと混在させると厄介なんだよな。

214:デフォルトの名無しさん
22/04/30 08:06:49.00 OR8SZm5l0.net
>>210
それshellのリターンコードと勘違いしてないか?
正常/異常を返すケースで正常が0って滅多にないと思うけど

215:デフォルトの名無しさん
22/04/30 08:13:30.52 3TsZhUq60.net
ほら、成功か失敗かを返すだけなら成功=0が一般的だったんだよ。
URLリンク(www.jpcert.or.jp)

216:デフォルトの名無しさん
22/04/30 08:14:04.30 VP7AAWWpa.net
やっぱboolってintみたいな構造体より重いんか?

217:デフォルトの名無しさん
22/04/30 08:15:37.08 Ce086BTG0.net
どちらもスカラーやろ

218:デフォルトの名無しさん
22/04/30 08:17:51.61 Hl+yZMpS0.net
>>203
普通は例外一択です。

219:デフォルトの名無しさん
22/04/30 09:29:44.98 /k/F8o6k0.net
おじいちゃんも多いので意見が分かれやすいですね

220:デフォルトの名無しさん
22/04/30 10:04:25.38 QtDBeglS0.net
エラーの内容を精査する必要があるなら、エラーコードなりを持たせた例外スローするけど
単純な失敗成功だけ見たいならbool返すかな

221:デフォルトの名無しさん
22/04/30 10:32:08.49 Ce086BTG0.net
例外のコストが高いからね

222:デフォルトの名無しさん
22/04/30 11:13:28.89 UYlijuGg0.net
>>211
C/CPPのライブラリは0が成功って割と多い
多分210が言いたいのはCにはbool型なんて無くてintをBOOLとして扱ってるからC的には0x100000はTRUE、C#的にはbyte化されて0となりfalseになるから注意ってことを言いたいんだと思うが

223:デフォルトの名無しさん
22/04/30 11:14:35.66 UYlijuGg0.net
>>213
別に重くない
例えば関数の戻り値でtrue表現するためのアセンブラは
intだとmov eax, 1
boolだとmov al, 1
アセンブリコードの使用バイト数的には同じか後者の方が小さかったはず

224:デフォルトの名無しさん
22/04/30 11:34:36.31 VP7AAWWpa.net
>>220
ありがとう。delegateにPredicateってあるからその用途でfuncだと重いのかと思ってた

225:デフォルトの名無しさん
22/04/30 11:39:28.25 Ce086BTG0.net
C#がネイティブコード出力するならそうだろうなぁ

226:デフォルトの名無しさん
22/04/30 12:00:38.37 OR8SZm5l0.net
>>212
例えばasctime_s()とかはerror_tを返すから正常/異常(だけ)を返すわけじゃないでしょ?
0で正常って言うのは多分fclose()とかの0とEOFを返すやつぐらいかと思うよ

227:デフォルトの名無しさん
22/04/30 12:01:55.46 UYlijuGg0.net
>>222
確かに.NET純正だとどうだろうな
少なくともUnityのil2cpp化されたものだとmov al, 1やtest al, alだが.NETもこれ以外の手法獲る必要性があるとは思えないが

228:デフォルトの名無しさん
22/04/30 12:13:31.51 Hl+yZMpS0.net
>>224
最終的にはマシン語になるわけだから同じでしょ。

229:デフォルトの名無しさん
22/04/30 12:20:54.96 UbbzWFWaM.net
>>221
デリゲート呼び出しはそれ自体がまあまあ重いぞ
少なくとも条件分岐にboolとintどっちを使用するかなどという微々たる差を全く無視できる程度にはな
そしてデリゲート呼び出しも普通はIOに比べたら誤差だから全く無視してよい

230:デフォルトの名無しさん
22/04/30 12:49:03.04 QtDBeglS0.net
簡易的に確認したいなら、
URLリンク(sharplab.io)
でResultにJIT Asm選べばアセンブリコード見れるぞ
単純な型なら、Release選ぶと殆ど元の型や関数呼び出し残らないのが確認出来る

231:デフォルトの名無しさん (ワッチョイ e724-OrLt)
22/04/30 13:57:37 UYlijuGg0.net
>>225
どういうマシン語を生成するかはコンパイラの自由だから同じになるかは分からない
まあ結果ある程度同じにはなるはずだが

232:デフォルトの名無しさん
22/05/09 19:30:59.59 BZKielY90.net
C#/MVVMでお絵かきソフトのようなことをやる必要があります。ドラッグして長方形を書いたり、それを選択して移動したりみたいな。多分inkcanvasとか使うんですかね?
それで色々と調べているのですが、コードビハインドから除外するというのがどうも難しくて何がなんだかわかりません。ビヘイビアだのコマンドだのどうやって実装したものか途方に暮れています
以前formsで同じようなものを作ってそのときは普通に実装出来たのでコードビハインドさえ使っていいなら普通に行けるだろうにという状況です
MVVMでviewのビハインドからコードを除外するというのはもう絶対に守るべきものなのでしょうか

233:デフォルトの名無しさん
22/05/09 19:40:32.75 TPAlWSfJ0.net
必要なんだろ
出題者に聞けよ

234:デフォルトの名無しさん
22/05/09 19:41:23.37 YUxIU5Ky0.net
>>229
UIコントロールの開発者は
はなからMVVMなぞ使っとらんよ

235:デフォルトの名無しさん
22/05/09 20:21:28.09 mjdEI+Ny0.net
>>229
原理主義者やっても幸せにはなれないぞ

236:デフォルトの名無しさん
22/05/09 20:24:22.51 ns3gCkSAM.net
>>229
WPF自体がもはやほとんど使われていないため、主流と呼べるような開発手法などは存在しない
自由に使えば良い

237:デフォルトの名無しさん
22/05/09 21:43:08.37 UnFDSJiw0.net
MVVM原理主義から見たらかなりインチキ臭いServiceってやり方で、MやVMからControlにアクセスするやり方が一般的かな
Canvasのプロパティーを持って、そこにアクセスするためのメソッドやプロパティーが入ったServiceクラスを作って、それを例えばVMのプロパティーにする
で、Viewが初期化された時にそのクラスを生成してプロパティーのCanvasに実態を設定する
そのクラスをVMの該当プロパティーにインジェクションする
わかりにくいだろうが、どっかに上手いこと書いてある解説でも探してくれ

238:デフォルトの名無しさん
22/05/10 08:48:07.33 CCpF9W9X0.net
普段c++でUIコントロール作ってるような開発者が
c#版作るからってわざわざMVVMなんか使うわけないでしょーーが

239:デフォルトの名無しさん
22/05/10 16:27:35.44 A0speGA90.net
普段WinFormとかでUI作ってる人に聞きたいんだけど
値の変化をリアルタイムでUIに反映する場合ってどうやってんの?
値が変化する箇所全てに画面の更新処理入れる感じ?

240:デフォルトの名無しさん
22/05/10 17:07:52.87 Qwl7JHFX0.net
>>236
うちの場合は画面にUpdate()なりをつくって、そのメソッド内に基本的に全部のコントロールの更新処理を書いて、必要な時に呼び出してる。
DataGridViewなど必要な時にしか更新しないものは、Update(bool all)などで処理を分けて対応してるかな。
パフォーマンスに問題ない限りは、富豪的プログラミングが管理しやすいと思う。

241:デフォルトの名無しさん
22/05/10 17:15:20.22 O/q6MN3Ra.net
SetValueWithRefresh(newvalue)みたいな代入と更新同時にする関数作って代入はそれでやれってするとか
プロパティのsetterにonvaluechangeみたいなeventhandlerおいといてそこ経由して更新させるとか
ちまちま代入と同時に更新処理直接呼ぶとか
>>237みたいな富豪的なのもあるな
状況によりけりだよ

242:デフォルトの名無しさん (オイコラミネオ MM9b-1CQB)
22/05/10 17:40:18 e+qIs2vlM.net
>>236
ReactiveExtensions

243:デフォルトの名無しさん
22/05/10 17:58:34.60 Bl3IG8H50.net
シンプルにやるなら、Timerから更新用のメソッド呼べばいいんじゃね

244:デフォルトの名無しさん
22/05/10 22:55:43.68 eH6jeiBY0.net
>>236
データバインディング
WinFormでも使えるんだぜ

245:デフォルトの名無しさん (テテンテンテン MMe6-0R8h)
22/05/13 13:29:25 c/0e0c1OM.net
初心者です。
c#でアプリ作成したのですが、自己署名証明書がないと、アプリ起動時、発行元不明の警告が出ますよね?
みなさんどうやってその警告を回避してますか?
何かいい方法があれば教えてほしいです。

246:デフォルトの名無しさん
22/05/13 14:18:26.21 UQ7pCVsua.net
配布するなら正攻法は証明書取得
個人でもできる。公証人に書類つくってもらって証明機関に申請すればいい。5年ごとに8万円ぐらい

247:デフォルトの名無しさん
22/05/13 14:33:27.72 msJ+xhZt0.net
一番安いのはWindowsStoreで、一度だけ18か18ドルぐらい払えばよかったはず

248:デフォルトの名無しさん
22/05/13 18:46:21.48 TYJN2jsR0.net
>>243-244
情報ありがとうございます。
自己署名証明書の取得方法も色々な方法がある事を学ばせていただきました。

249:デフォルトの名無しさん
22/05/13 22:05:38.65 pmeFRqGo0.net
つか自己署名なら自分で勝手に作ればいいわけで...
自己署名じゃないちゃんとした証明書が必要なんだろうと

250:デフォルトの名無しさん
22/05/13 22:24:43.10 TYJN2jsR0.net
>>246
自己署名の話を皆様に聞いた理由は、他の人のPCにインストールした際に、不明な発行元と表示されてしまうのを回避したい と言う理由だけなんです。
不明な発行元と警告が出る種類も何パターンかありますよね?
フォームで出るパターン と、ブルースクリーンの様な画面で出るパターン
この両方の警告に対応するには、お金を支払い自己署名するしかないのかなあと漠然と考えてました。
その自分で作成する方法(オレオレ自己署名)も見たのですが、アプリではない感じだったので、、あまり詳しく理解できていません。。

251:デフォルトの名無しさん
22/05/13 22:29:59.42 cpvIzMAY0.net
「自己署名」を間違えて理解してるんじゃね?

252:デフォルトの名無しさん
22/05/13 22:55:59.91 TYJN2jsR0.net
>>248
もしよろしければ、自己署名についてご教示願えないでしょうか?
なかなかこの辺の記事は書籍で書いてないので。。

253:デフォルトの名無しさん
22/05/13 23:18:12.14 S8Zs+Y9A0.net
>>249
調べるべきは「電子署名」であって「自己署名」じゃないぞ
もっと正解に近いキーワードは「コードサイニング証明書」と「MS Authenticode」

254:デフォルトの名無しさん
22/05/13 23:41:37.05 btyzcX5fa.net
>>249は認識あってるよ
>>248はたぶん自己署名=オレオレ署名と勘違いしてるだけ
発行してもらった正規のでもオレオレのを使っても自己署名には変わらない
自己署名 =自分でexeに対して電子署名すること
電子署名 =電子的な署名
電子証明書=自己署名やsslなどで必要になるやつ(一般的には公的機関からのものを指すけど、自分で作ったのも含む)
オレオレ証明書 =自分で作った電子証明書
オレオレ署名 =オレオレ証明書を使った電子署名
コードサイニング証明書=電子証明書のうち、exeなどの署名に特化したもの(公的機関から買う。自分で作ったのは汎用的だからこう呼ぶことはない)
自己署名証明書 ≒コードサイニング証明書

255:デフォルトの名無しさん
22/05/13 23:59:49.70 I/jceGHeM.net
すごい認識だな

256:デフォルトの名無しさん
22/05/14 00:14:27.18 3IgnexNy0.net
>>251
ちょっとその調子で、「自己署名証明書」の定義も教えてくれ
ちなみに>>246での「自己署名」とは「自己署名証明書」の意味で書いてるわけだが
つか、
>>242も自己署名証明書はその定義だと考えてるのかな

257:デフォルトの名無しさん
22/05/14 00:31:05.21 multK6hC0.net
あ、オレオレ定義のアウアウウーさんだ

258:デフォルトの名無しさん
22/05/14 00:45:49.42 q1SIpySda.net
自己署名証明書、自己署名、電子署名っての自体はオレオレ署名とまともな署名のどっちに使っても問題ない
だから自己署名=オレオレだと決めつけて解釈していくとあらぬ方向に行くんだよ
>>246は「勝手に作る」というような言葉が使われてるからオレオレ証明書のことだと分かるし
>>242は発行元不明を防ぎたいという文脈から公的な証明書のことだと分かる

259:デフォルトの名無しさん
22/05/14 01:12:09.43 3IgnexNy0.net
>>255
つまりお前は自己署名証明書での署名も「まともな署名」としてあつかうんだな

260:デフォルトの名無しさん
22/05/14 01:17:06.48 YyWH0a110.net
>>251
アプリの発行にあたって必要なのは自己証明書じゃなくて信頼できる認証局から発行された証明書。
自分がその認証局自身でない限り自己証明書にはならない。

261:デフォルトの名無しさん
22/05/14 01:23:01.16 YyWH0a110.net
>自己署名 =自分でexeに対して電子署名すること
なんだこれ?こんな用法見たことない。

262:デフォルトの名無しさん (ワッチョイ d32d-hFP2)
22/05/14 01:40:53 41BaXtRu0.net
>>251,255
その出鱈目どこで覚えた?
字面から想像しただけかな

URLリンク(e-words.jp)

263:デフォルトの名無しさん
22/05/14 10:41:44.00 XXC0KMFKM.net
>>251,255みたいなのは
相手がビギナーや若手だと見るや嬉々としてデマカセを吹き込んでほくそ笑むタイプなんでしょ
本人はやってて楽しいのかもしれないけど傍から見てるとひどく滑稽

264:デフォルトの名無しさん
22/05/14 21:16:53.25 D+nf+blC0.net
C#って移植性は高いんですか?入門書をのぞいてみたけどGUIの項目ではWindows限定でした

265:デフォルトの名無しさん
22/05/14 23:51:51.56 6ACM/5dE0.net
242 の質問者です。
僕の質問が悪かったせいで、少し雰囲気を悪くさせてしまった様で申し訳ありませんでした。
改めて質問させてください。
コードサイニング証明書の取得はどこが1番、費用が安いでしょうか?
聞くだけではダメなので、自分でもネットで調べてみました。
個人的にてはありますが、海外のECサイトで、1年で99ドルというものもありました。
URLリンク(blog.katsubemakito.net)
日本だと、1年で2万円が最安値?と認識してます。

266:デフォルトの名無しさん
22/05/15 00:04:11.57 tGTiPFBf0.net
それ、そんなに必要なものか?
ネットに転がってるフリーソフト使ってたらガンガン出るけど

267:デフォルトの名無しさん
22/05/15 00:06:57.20 tGTiPFBf0.net
そもそも海外のよくわかんねー機関に金積んで得られるものに何の信用があるのよ?

268:デフォルトの名無しさん
22/05/15 00:26:37.67 Ipi6C5sV0.net
WIndowsで使えるってことはMSがその認証機関を信用してるってこと
認証機関がいい加減な仕事をして信用を失うとそこのルート証明書が無効化される

269:デフォルトの名無しさん (ワッチョイ b342-lIli)
22/05/15 00:57:30 ZqvBN/g40.net
圧倒的に安いのはMSのWindowsStore
費用は大体2000円ぐらいで生涯使えるし、一つのアカウントを使い続けるならアプリは何本でも追加費用は取られない
問題はUWP,WinUI3で作るか、WpfやWinFormsならMSIX形式のインストーラに変更することとMSの審査があるのでそれを通さないといけないこと
Windows10仕様のアイコンも作らないといけない

270:デフォルトの名無しさん (ワッチョイ efd2-ydBh)
22/05/15 00:58:59 LE0M373c0.net
便乗して質問だけどこういう認証ってのは
配布するインストーラのバイナリが「改竄されていない」、「配布元が会社名 CO LTD.を名乗る権利がある」ってのを保証してくれるだけ?

保証元として信用するのはデフォルトではMicrosoft(かMicrosoftが認証してる保証会社)だけって認識だけど

271:デフォルトの名無しさん
22/05/15 01:38:10.49 Ipi6C5sV0.net
>>267
「配布元が会社名 CO LTD.を名乗る権利がある」じゃなくて「アプリの配布元(がなりすましされていないこと)」の保証だね
個人でも取得できるコードサイニング証明書は無条件にはMSに信用されてなくて最初の内はSmartScreenが表示される(らしい)
法人しか取得できないEVコードサイニング証明書なら最初からSmartScreenは表示されない
後者は法人の存在確認が定期的にあったりより厳密

272:デフォルトの名無しさん
22/05/15 01:38:43.97 Ipi6C5sV0.net
厳密じゃなくて厳格か

273:デフォルトの名無しさん
22/05/15 03:02:38.88 tGTiPFBf0.net
成りすまし/改ざん防止なら最近添えるのが流行りのpgpとかで十分なんじゃないの、何か悪い事が起きても俺じゃなくて他人が手を加えたせいだ、という証明にはなるから自己防衛には十分だろ
逆に言えば何かあったら言い逃れできないけど、認証機関を介さないが故に個人情報とは切り離せるわけで、トンズラも可能
書き手にとってはとても都合がいい

274:デフォルトの名無しさん
22/05/15 10:26:11.54 Ipi6C5sV0.net



275: >>270 目的が変わってるぞw 元はUACやSmartScreenで発行元不明って表示されないようにしたいって話 PGPはWindowsが対応していないからそれには役に立たない



276:デフォルトの名無しさん
22/05/15 15:14:46.24 F+SXCyPNM.net
サイン証明って実はリソース部分書き換えてもついたままなをだよな。

277:デフォルトの名無しさん (ワッチョイ 9fda-Zpy8)
22/05/15 21:35:20 9FqWYCkM0.net
リソースってのはCOFF的には只の特殊セグメントなんでな
更に、ユーザー定義リソースってどんなデーターでも
格納出来る形式があってだな、we留守の格納に...おや誰か来たようだ

278:デフォルトの名無しさん
22/05/16 06:56:14.67 6t2iMJ0O0.net
SmartScreenの警告はダウンロードしたときに
「ファイル名:Zone.Identifier」が勝手に作成されて起動時にチェックしてる

279:デフォルトの名無しさん
22/05/17 22:43:59.32 U++gJ6eR0.net
TreeViewとかListViewの使い方が載っている本を教えてください。

280:デフォルトの名無しさん
22/05/17 22:55:59.31 vPKF91U40.net
>>231-234
遅くなりましたけどありがとうございました。もう時間も迫ってきたし色々と諦めてコードビハインドに書いてます。
ただそれでも色々と勝手が違って苦戦していますが……WPF難しすぎる……

281:デフォルトの名無しさん
22/05/17 23:41:38.48 C7nZqj5bM.net
>>275
本は無駄
検索したほうがいい
どうしても分からなかったら英語で質問

282:デフォルトの名無しさん (ワッチョイ 9fda-Zpy8)
22/05/18 00:14:57 2qQDAoA/0.net
>>275
Windows95ユーザーインターフェイスプログラミング

ナンシークラッツ本

283:デフォルトの名無しさん
22/05/18 21:10:13.07 dKdqkOyw0.net
>>277 >>278
ありがとうございます。
今から勉強しているので必要になりました。
週末、本屋さんに行ってきます。

284:デフォルトの名無しさん
22/05/18 21:31:33.31 diUTiqLR0.net
nLogは5.0からdatabase名前空間のパッケージが独立した
破壊的変更の場合はもう少しわかりやすいところに変更書いてくれよ
nlog.databaseを追加すりゃいいだけなんだけどさ

285:デフォルトの名無しさん
22/05/18 21:35:57.04 iR7wkq9I0.net
>>279
本屋さんにこの手の専門書はほぼないだろうなぁ

286:デフォルトの名無しさん
22/05/18 23:44:43.59 5wqn8ALkM.net
本には詳しい説明は書いてないのでやりたいことを検索窓に突っ込んだ方がまし
listview databinding item 幅いっぱいとかw

287:デフォルトの名無しさん
22/05/19 00:15:57.29 uGnwJzVO0.net
NLogお世話になってます

288:デフォルトの名無しさん
22/05/19 23:10:43.67 VcSHhdY40.net
Windows95の時代にC#があったかな。

289:デフォルトの名無しさん (ワッチョイ 2b68-yvGd)
22/05/20 00:57:04 R6FV90Kc0.net
相談です。
ランチャーを作りたいなと思い起動時は非表示(非アクティブ)に
何かのキーを押されたら表示したいのです。
アプリが非アクティブの時でもキーボードの入力イベントを取得する方法は無いでしょうか?

290:デフォルトの名無しさん
22/05/20 01:34:48.57 eaUqMOJr0.net
>>285
グローバルフック

291:デフォルトの名無しさん
22/05/21 02:00:44.14 pmnVOflo0.net
>>286
サンクス!
WPFで作ってるんだけどグローバルフックを調べて組み込んでみました。
MainWindowをHideするとグローバルフックが効かなくなるので
MainWindowは描画をせずグローバルフックを動かして、
子WindowにWindowを描画してHide/Showするようにしたらなんとか形になりました。
こんなのでいいのかなんだかすっきりせず。

292:デフォルトの名無しさん
22/05/21 10:29:06.89 XiDxIIx00.net
>>287
なんでだろ?メインウィンドウからフック仕掛けてる?
Formsの頃の記憶だけど、Application.run以前にSingletonな管理クラス作ってやってた。
そいつからイベント送られてくるようにしてたよ。
それで問題なかったはずだけど、なんか変わったんのかな。

293:デフォルトの名無しさん
22/05/21 14:05:38.07 2Lltosx/0.net
以前HotKeyで作ったけど中身はグローバルフックなんかな

294:デフォルトの名無しさん
22/05/21 15:40:41.47 4jCCGHc40.net
Utf8Parser.TryParse(span, out DateTime date, out _, 'O')について聞きたいんだけど、以下の文字列はUtf8Bytesとして
"2022-01-01T00:00:00.0000000Z" ← 28文字のこれなら正常に成功するのに
"2022-01-01T00:00:00.000000Z" ← 27文字のこっちは失敗する
DateTime.TryParseなら後者も成功するんだけどこれはUtf8Parserがポンコツってこと?
それともDateTime.TryParseがオーバー解析してくれてるだけで28文字未満の"O"形式のDateTime投げてくる方が非常識?

295:デフォルトの名無しさん
22/05/21 15:55:42.97 cfNQUnEf0.net
>>290
URLリンク(github.com)
27文字目は数字以外だとエラーになるっぽいね

296:デフォルトの名無しさん
22/05/21 16:15:24.74 ec9yQBCj0.net
>>290
失敗しても仕様の範囲内ぽい
> ラウンドトリップ ("O"、"o") 書式指定子
> "O" または "o" 標準書式指定子は、DateTime 値の "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK" カスタム書式指定文字列と
> DateTimeOffset 値の "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz" カスタム書式指定文字列に対応します。

297:sage
22/05/21 16:43:22.42 0fNBsESd0.net
27文字のが来る状況あるんだっけ?

298:デフォルトの名無しさん
22/05/21 18:38:40.30 hT1fnPAH0.net
>>288
レスありがとう!
MainWindowからフックしています。
シングルトンにはしてないですが、MainWindowは生きているので、
フック自体は破棄されていませんが、どうもダメでした・・・

299:デフォルトの名無しさん
22/05/21 21:45:54.24 8HM5gfhu0.net
>>285
特定のキーで表示ならSystem.Timers.Timer使ってGetKeyStateとかでキー入力監視
キーがヒットしたらタイマー止めて目的のウィンドウを表示
ずっと監視するのが嫌でなければ実装はかなり楽な方かと
アプリランチャーならタスクトレイに格納してマウスクリックで表示させての方が使いやすい気がするけど

300:デフォルトの名無しさん
22/05/22 01:09:06.35 7HW4nX7o0.net
RawInputでいいんじゃね

301:デフォルトの名無しさん
22/05/22 01:44:20.92 xpEgvjj30.net
>>285 です
>>288 さんの
>Application.run以前に
というのをヒントに、WPFなのでrun()は無いけど、Appにコンストラクタを記載しその中でフックを起動して、
キーダウンのイベント内でMainWindowを取得し制御する事で上手く行きました!
その他手法含めご教授してくださった方々有難うございます!

302:デフォルトの名無しさん (ワッチョイ 5b24-HkEA)
22/05/22 09:35:29 gmOf9ICx0.net
>>291-293
現状だと28文字未満だったらUtf16に変換してDateTimeの方でやるしかないか
そこそこ知られてるWebサービスのAPIがたまに桁詰められて27文字の投げてくるんだよね

303:デフォルトの名無しさん
22/05/22 10:21:24.48 GyF0oANxM.net
悪いけど、Webのレスポンスだったら最初から全部UTF16でやっても全くパフォーマンス変わらないと思うよ

304:デフォルトの名無しさん
22/05/22 11:48:59.69 gmOf9ICx0.net
>>299
そんな大きなペナルティがあるとは思ってないけど全く変わらないというのはどういう原理で?
JsonDocument.Parse(response.Content.ReadAsStream())みたいな感じでやってるけど、これだとUtf8のままパースされてるよね

305:デフォルトの名無しさん
22/05/22 15:34:34.14 Nn/6kHB8d.net
用途次第じゃない?
HTTPSの通信に比べればJSONのデコードなんか誤差だから単一の処理で見るなら全く意味ないだろうけど、
もし大量のリクエストを捌くサーバーを作っているならCPUやメモリの使用率を削減することでサーバーのインスタンス数を削減できるかもしれない

306:デフォルトの名無しさん
22/05/22 16:53:52.96 7HW4nX7o0.net
そこまでシビアなら、他にもっと先に見直す所があると思うけど

307:デフォルトの名無しさん
22/05/29 18:01:05.65 Gx8AtDBv0.net
WindowsFormはそれなりに少し経験はあるんですが行き詰まっているので相談です
centos7にapach上で、これまでhttpd.confにAliasで特定のドキュメントルーツを設定して
phpでつくったWebアプリをいくつか動かしている環境があり、ここに新たに
Blazorサーバやってみようと、dotnetインストールしてrunまではできてます
(配置したdllを実行するserviceをつくってそれも起動可能な状態)
phpでつくったアプリのようにAliasで簡単にできるかなと思ってたらそうでもなく
サイトググるとVirtualHostの例がちらほら
example.com/app1 ・・・ var/www/app1 にphpアプリ配置
example.com/app2 ・・・var/www/app2 にphpアプリ配置
example.com/blazor を新たに配置するにはどの辺調べればいいですかね
MSのドキュメントやBlazorや先日でたNET6の書籍とか見ながらいろいろやってはみたものの
どれもうまくいかず、行き詰まっております(方向性を見失ってます)
リクエストきたものをkestrelに渡してやらなきゃいけないってのはなんとなく理解してますが
VirtualHostとリバースプロキシをきちんと理解しないでできないですかね


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch