[過去ログ] C#, C♯, C#相談室 Part96 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
16
(1): デフォルトの名無しさん (ワッチョイ 2db3-qu6v) [sage] 2022/01/19(水) 13:00:14.97 ID:sR6sbC/m0(1) AAS
.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を呼び出すしかないんですかね?
25: デフォルトの名無しさん (ワッチョイ c289-jdZh) [sage] 2022/01/21(金) 07:44:34.97 ID:cI8Ya7xA0(1) AAS
それってリリースビルドでも大丈夫なん?
156
(1): デフォルトの名無しさん (ワッチョイ 7d02-WCXV) [sage] 2022/03/16(水) 02:59:05.97 ID:b5JRB2Cp0(1/3) AAS
最近の標準ライブラリの実装を見るに、.NET開発チームはIntPtrを使わせたくないように感じる
ポインタ弄るなら、あぶねー事やってんだから明確にunsafe宣言しろって事なんだろうな
157
(1): デフォルトの名無しさん (ワッチョイ 1232-IMun) [sage] 2022/03/16(水) 15:09:58.97 ID:lykY2TTP0(2/2) AAS
>>137
137(2): デフォルトの名無しさん (ワッチョイ a236-8qwV) [sage] 2022/03/15(火) 17:49:18.74 ID:uT8cdwkS0(1/4) AAS
相談させてください。

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

どうぞよろしくお願いいたします。
>>153
153(2): デフォルトの名無しさん (ワッチョイ a236-8qwV) [sage] 2022/03/16(水) 00:04:15.38 ID:pAqxvPky0(1/2) AAS
>>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 から期待される動作と変わってしまうようなら、
やはりバグとして報告したほうがよいのかなというのが今のところの考えです。
よくよく調べてみたらズバリそのものが有りました
外部リンク:github.com
>>156で言われている様な主旨のコメントもありますね

元コードの添え書きを見るに意図されたものと見受けられますが
ぬるぽを多少オフセットした所でデリファンレスしたら一緒という事でしょうか

昨年の時点で修正が入っていますが、マイルストーンは7.0.0とされ6.0.3でも取りこまれていません
外部リンク[cpp]:github.com
.NET 7.0 Previewにはマージされており、その後さらに周辺コードはリファクタリングされ移動しています
外部リンク:github.com

まぁやはり本来は相対オフセットが期待されるところですから
絶対オフセットではなく大人しくAsRefを使うべきなのかもしれません
269: デフォルトの名無しさん (ワッチョイ d32d-hFP2) [sage] 2022/05/15(日) 01:38:43.97 ID:Ipi6C5sV0(3/4) AAS
厳密じゃなくて厳格か
291
(1): デフォルトの名無しさん (ワッチョイ 6778-eugl) [sage] 2022/05/21(土) 15:55:42.97 ID:cfNQUnEf0(1) AAS
>>290
290(2): デフォルトの名無しさん (ワッチョイ 5b24-HkEA) [sage] 2022/05/21(土) 15:40:41.47 ID:4jCCGHc40(1) AAS
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投げてくる方が非常識?
外部リンク[cs]:github.com
27文字目は数字以外だとエラーになるっぽいね
331: デフォルトの名無しさん (ドコグロ MM4f-85MC) [sage] 2022/06/26(日) 11:09:18.97 ID:4GsWpWI+M(1) AAS
non-alphanumeric
352: デフォルトの名無しさん (スッップ Sdaa-8NLY) [] 2022/07/02(土) 10:15:43.97 ID:2EN85JI9d(1) AAS
VS2022スレに書くか迷ったけどスレの勢いがありそうなこちらに

razorページ書いてて、コード部分や変数部分が色が変わるけど、ページスクロールさせていくと一定の場所からプロパティの色がとぶ
上に戻ると表示は直る、消えているときは数秒ごとに付くべき色が一瞬ちらつく
メソッドの定義なんかは色が付いたまま

考えられる原因ってありますかねぇ
伝わるかどうか不安ですが、、、
453: デフォルトの名無しさん (アウアウウー Sa5b-8eP5) [sage] 2022/09/20(火) 10:49:28.97 ID:2fXkGtCja(1) AAS
NHKおはスポ
503: デフォルトの名無しさん (アウアウウー Sa9d-gxoH) [sage] 2022/11/03(木) 15:00:49.97 ID:j+eH91hfa(2/3) AAS
どうやってんのそれw
570
(2): デフォルトの名無しさん (ワッチョイ a2bd-E1si) [] 2022/11/11(金) 22:46:09.97 ID:2RvqW7n80(1) AAS
ロード中とかに使いそうなグルグルするアニメーション画像をピクチャーボックスに入れて、処理開始から終わりまで表示してグルグルさせたいんですけど、最後の完了のメッセージボックス出るまで映る事なく終わります。
メッセージボックス表示中でOKクリックするまではぐるぐるしてるんですがどうしたら出来ますか?

コードの流れはフォームからenter keyでスタートして別クラス行って処理して、戻ってきてメッセージボックス表示の流れなんですが。
637: デフォルトの名無しさん (オイコラミネオ MM9e-LO0k) [sage] 2022/11/24(木) 11:41:54.97 ID:P67WlZAQM(2/2) AAS
んで
確実に再現するには余計な状態が少ないほど簡単だね
655
(1): デフォルトの名無しさん (ワッチョイ ef8e-P3Qh) [] 2022/11/25(金) 01:26:19.97 ID:8Qv7d+j40(1) AAS
コメント見ただけで素人だとわかる
765
(2): デフォルトの名無しさん (ワッチョイ 5e79-FYZG) [sage] 2022/12/05(月) 18:52:03.97 ID:CB8LgCez0(1/2) AAS
外部リンク:office54.net

ググッたら出てきたけど違う?
930: デフォルトの名無しさん (アウアウウー Sa9f-6ae9) [sage] 2022/12/19(月) 19:36:05.97 ID:l2DO4th2a(2/3) AAS
多重に三項演算子使うぐらいならswitch式の方がマシじゃね?
var rst = src.Select(c => c switch{ 'a' => '1', 'b' => '2', _ => c });
954: デフォルトの名無しさん (スッップ Sd8a-JDfe) [] 2022/12/20(火) 17:37:55.97 ID:pH7eiimed(6/9) AAS
>>952
952(1): デフォルトの名無しさん (ワッチョイ aa7c-e5AJ) [sage] 2022/12/20(火) 17:33:48.40 ID:cyGUI4Ab0(2/2) AAS
>>948
visual studioで空のUWPプロジェクト作って
releaseで.NETネイティブツールチェインをオンにして生成されたApp1.exeをILSpyで見ても
普通に中身見れるなw
MSのストア側でnativeになるとかじゃない?
965: デフォルトの名無しさん (ワッチョイ 535f-f2OJ) [sage] 2022/12/20(火) 21:55:47.97 ID:oMNiRABq0(2/2) AAS
>>959
959(1): デフォルトの名無しさん (スッップ Sd8a-JDfe) [] 2022/12/20(火) 20:36:05.36 ID:pH7eiimed(8/9) AAS
>>958
流行ってきてもすぐにコピーアプリつくられたら
収益激減しちゃうでしょ
利用規約なんて書いても少し変えてコピーアプリつくられたらおしまいだよ
実害がはっきりでる
例えば300円のアプリ、コピーされて100円で売られたらこっちは大損だよ
実際Windows以外ではアプリ作っててそこそこダウンロードされてるけど、コピーアプリが追いついたこと無いぞ。
単純に品質と知名度でしょ。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.349s*