ふらっと C#,C♯,C#(初心者用) Part138
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part93 https://mevius.5ch.net/test/read.cgi/tech/1492818720/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part137 https://mevius.5ch.net/test/read.cgi/tech/1523004019/ ■コードを貼る場合は↓を使いましょう。 http://ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/ja-jp/library/gg145045.aspx https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://msdn.microsoft.com/en-us/library/gg145045.aspx http://referencesource.microsoft.com/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured id="→sample←" webページ上の値じゃなくて、→←で囲ったsampleという結果がほしいんです。 >>345 と >>434 は同じ人か? seleniumの話なら webDriver.Url = @"https://www.seleniumhq.org/" ;; IWebElement element = webDriver.FindElement(By.Id("promo")); element.FindElement(By.XPath("a")).GetAttribute("id"); C♯勉強したんだけどネットに参考になるサイトないですか? VBAはこれで勉強してネットで使いながらそこそこは出来るようにはなりました。何かを作りながら取り敢えず基礎的仕組みを理解出来ればと思ってます。 https://for-guests.com/excel-vba-6006/ >>444 無事に目的を果たせました! 感謝です。 PC上からC#で制御できる汎用IO製品って安いのないんかな? Raspberry PiについてるGPIOみたいなのが欲しいんだけど デバドラの認証コストだけでも結構なお金がかかるからなぁ >>450 あんまり安くもないがこんなのとか http://akizukidenshi.com/catalog/g/gK-01977/ このICの本来の用途はGPIOじゃないが、GPIOとしても使えたはず。 でも8本 + αしかないし使い方に癖があった気がする。 むしろラズパイやらArduinoとシリアル通信させてそちらのgpioに何か繋ぐ方が、安心安全いざショートしちゃったとかのアクシデントの時にも安く済むよ。 >>454 それシリアル USBパラレル変換モジュールの方では? Attiny85のV-USBで遊んでるarduino互換 完成品にDigisparkってのがあるけど尼とかで数百円 https://www.amazon.co.jp/dp/B0154PL3QA/ >>456 だから >このICの本来の用途はGPIOじゃないが、GPIOとしても使えたはず。 って前置きしてるでしょ。 確認してみたけど、ちょっと変則的だけど一応使えるよやっぱり パラレルの方(FT245)のICもGPIOとして使えるが(こっちも本来はそういう用途じゃない。ちなみにこっちは使用経験あり) こっちの方がちょっとだけ高価でGPIOとして使えるピン数も少ない http://akizukidenshi.com/catalog/g/gK-01799/ >>454 取説見るとデジタルI/Oは5本みたいだが。 >>459 スレ違いだけど、このドキュメントのP3に書いてある特殊機能があるんよ http://www.ftdichip.com/Support/Documents/AppNotes/AN_232R-01_Bit_Bang_Mode_Available_For_FT232R_and_Ft245R.pdf 最低8本は使える 残りのプラスアルファーがどういう風に使えるかは、たぶんドライバーのAPI アプリケーションノートに書いてあると思うが、さすがに面倒だから読んでない FTDIのはドライバ必須だし HIDとかで繋がるやつ揃えた方が楽だよ HIDというか標準クラスね 例えばArduino Leonardo相当であれば何にでも化けられる digisparkというのを使ってたけどHIDデバイスに見えて入出力OK 昔は300円以下で送料無料で中国から買えたんだけど値上がりしちゃった C♯でMySQLを操作したいのですが楽に扱えるライブラリはありますか? EntityFrameworkを使いたいのですがイマイチ接続できないので 一応昔にSQL書いて操作するパターンも作ったことありますが出来ればせっかくなのでやり取り楽な風にできればと思ってます ありがとうございます Dapperの存在忘れてましたこちら使い方少し調べてみます LinqConnectも調べましたが環境整えるところからなので余裕ができたらこちらも調べてみます 教えてください Power1とPower2はxのn乗を求める関数だそうなのですが なぜPower2がxのn乗になるのかさっぱり分かりません しかもPower2の方がPower1よりも効率がいいらしいです よろしくお願いします double Power1(double x, uint n) { double power = 1; while (n > 0) { power = power * x; n = n - 1; } return power; } double Power2(double x, uint n) { double power = 1; while (n > 0) { if (n % 2 == 1) power = power * x; x = x * x; n = n / 2; } return power; } double power = 1.0; の方が効率がいいぞ >>471 高校数学やん x^(a +b) = x^a + x^b x^(a * b) = (x^a)^b >>471 これでわかるか? x^n = { nが2で割り切れるとき x^(n/2) * x^(n/2) 割り切れないとき x^((n-1)/2) * x^((n-1)/2) } すまん訂正 割り切れないとき、はこれにxを掛けてくれ >>473 ん゛? × x^(a +b) = x^a + x^b 〇 x^(a +b) = x^a * x^b >>472 ありがとうございます 定数だけの四則演算やキャストはコンパイルの時点で行われるから 効率に影響は無いと習ったのですがこの場合は違うのですね キャストがコンパイル時と実行時のどちらで行われるかを判断する 簡単な方法があれば教えてほしいです >>473 >>476 ありがとうございます 指数法則が関係あるのですね これをヒントにもう一度考えてみます >>474-475 ありがとうございます 教えてもらったことをヒントに再帰を使ってxのn乗を作ってみたのですが この関数はあってますか? でも、やっぱりなぜPower2がxのn乗になるのかよく分かりませんでした double Power3(double x, uint n) { if (n == 0) return 1; else if (n % 2 == 0) return Power3(x, n / 2) * Power3(x, n / 2); else return Power3(x, (n - 1) / 2) * Power3(x, (n - 1) / 2) * x; } >>477 こうじゃない? いい加減に書いたから間違ってたらごめん double Power(double x, uint n) { if (x == 0) return 0; if (n == 0) return 1; if (n == 1) return x; return n % 2 == 0 ? Power(x * x, n / 2) : Power(x * x, n / 2) * x; } 要するに、 x^(a + 1) = x^a * x x^(2 * a) = (x * x)^a >>478 ありがとうございます そのPowerを再帰を使わずに書くと>>471 のPower2になるということですか? なんだか分かりそうな気がしてきたのでその方向でもう一度考えてみます! お陰様で>>471 について理解できたと思います どうもありがとうございました! >>480 言われてみると、>>471 のPower1やPower2では0の0乗が1になりますが >>478 のPowerだと0の0乗が0になりますね 調べてみたらWikipediaに「0の0乗」というページがあって 確かに0の0乗を1と考えることが多いと書いてありましたが それ以外の考え方もあるみたいです 0乗が1以外になる考え方なんてあるんだ 単位元の1に何も掛けないんだから常に1だと思ってた >>471 の件ではどうもありがとうございました もう一つ質問させてください 以下のPopulation1とPopulation2は同じ結果になるそうです Population1は>>471 のPower2によく似てるので これは指数計算の変形だと思うのですが、 Population2でも同じ結果になるのが理解できません 何度もすみませんがよろしくお願いします uint Population1(uint n) { uint population = 0; while (n > 0) { if (n % 2 == 1) population = population + 1; n = n / 2; } return population; } uint Population2(uint n) { uint population = 0; while (n > 0) { population = population + 1; n = n & n - 1; } return population; } >>482 確かにWikipediaによれば 半群Sが単位元1をもつならSの元aの0乗は1になるので Sが零元0ももつなら0の0乗は1になるそうです・・・なんのこっちゃw >>483 ありがとうございます Power2はちゃんとした名前のついたアルゴリズムだったんですね この分だとPopulation2にも名前がついてそうですが それらしい情報を見つけることができなかったので もしご存知だったら教えてもらえると嬉しいです >>484 面白いねw 要は1が立ってるビットの数を数えてるわけだと思うけど、 Population2の方は >n = n & n - 1; これやると1が立ってる最下位ビットが消えるんだなw 名前は知らないごめんね >>486 ありがとうございます ビット演算については分かってるつもりだったのに全然でした・・・ ヒントを貰って下のようなプログラムを試してみたら 確かに最下位ビットが順に消えていって感動です uint n = 4649; while (n > 0) { Console.WriteLine(Convert.ToString(n, 2)); n = n & n - 1; } 【実行結果】 1001000101001 1001000101000 1001000100000 1001000000000 1000000000000 でも結局n = n & n - 1;で最下位ビットが消える理由が 理解できていないのでもう少し考えてきます >>487 デクリメントした時、 (1) ボローが発生しなくなる桁(つまり、最下位の1の桁)はデクリメントの前は1、後は0 (2) その下位の桁はデクリメントの前は0、後は1 (3) 上位の桁の値は変わらない なんだから、前後の値の論理積は必ず最下位の1まで0になる >>488 とてもわかり易い説明ありがとうございます!お陰様で理解できました 実はこの説明を読むまでn & n - 1は(n & n) - 1という意味だと思ってて、 それならn - 1と同じじゃないのかと思いながらも トンチンカンなことを言ってしまうのが怖くて黙ってたのですが、 こんなことなら変なプライドは捨ててさっさと疑問をぶつければよかったです この問題を考えていて、少しビット演算に慣れてきた気がします 使い道があるかどうかは分かりませんが、 n = n & ~(n - 1);だと逆に最下位ビット以外を消すことができるんですね とにかく、どうもありがとうございました 今更ですがPopulationってビットの人口ってことだったんですね・・・ Wikipediaにもページがバッチリありました https://en.wikipedia.org/wiki/Population_count C#で予め用意されているクラス(Mathなど)のソースコードを見ることは可能ですか? 勉強がてら、どんな風に書かれているのか見てみたいのですが・・・ >>492 ここにある ちなみにMathは大部分が直接CLRに組み込まれていてC++で実装されているからあまり参考にはならんぞ https://github.com/dotnet/corefx さすがに今更 Reference Sources は時代遅れだろ Coreの方がコンパクトに纏まっててわかりやすいし、コピペしても捕まらないし 他人の書いたライブラリとか使おうと思っても仕様書もどう読めばいいかあまりわからなくて いつも他人様の書いたコード見てやっとなんとなく使い方理解できてるんですが サラサラかける人はどういう見かたしてるんですか?サンプル見てメソッド見ればもうわかるのですか? >>496 ソースのメソッド見て中身理解するのは仕様書読むよりも難しくないか メジャーなライブラリなら例を書いているサンプルがネット上にいっぱいあるし そうでなくてもある程度自分で試しながら理解したらいいと思うが >>496 サンプル見ればだいたい分かるよ お前も新しいフリーソフトとかWebサービスとか使うときマニュアル見なくてもだいたい分かるだろ? それでお前の母ちゃんや友人に何で分かるのか聞かれて何て答える? それと同じことで、経験を積むとパターンやライブラリの作者の考えが読めるようになってくる 簡単だよ こういう処理がしたいならメソッドにこういう文字列が含まれてるはずだよな インテリセンスカチャカチャほらみろ有ったぞ 次は引数をドキュメントコメントで調べて入力 コンパイルエラー消えたよしこれでオッケー ビルドして起動したら…はい動いたおわり だいたいこんな感じ 今はライブラリも開発環境も優秀すぎて楽だよほんと LINQ使った最近のデザパタ紹介しているサイトや書籍ってある? どこもなんか古いコードで >>501 linqの古いコードって、例えばどんなん?ラムダ使ってない奴のことかな? 性懲りもなくよう相手にするなあこのクサレ脳みそども 他のスレでデザパタと略す奴は例外なくクソって言う風潮があるから その略称は使わないほうがいいw LinqというかDBアクセス系のパターンの事ならリポジトリパターンやイベントソーシング・CQRSあたりかな MSの黒本 C#実践開発手法 はどうだろう あとRxも押さえとけば 名前付きパイプでプロセス間通信するとき、できるだけ遅延を小さくするためにすべきこと、したほうがいいことがありますか? ポータブルなASP.NET実行環境はありますか? 勝手にソフトインストール出来ない環境で使いたい為、Tomcatのように、設定ファイルで設定してexe起動するだけのタイプを探しています。 >>509 .NET CoreとASP.NET Core SCDでデプロイして内蔵サーバーのKestelで動かす CoreはMVC系なので509が知っているASP.NETとは別物かもしれないが formが3つがあってそれぞれ仮にa,b,cとして、a,b,cの中にコンボボックスがいくつかあってaのコンボボックスの一つにエクセルをdbで読み取って?コンボボックスに値を入れました。 以降もコンボボックスに入れてくんですけど、違いがブック名とシート名でコードをまとめたい時はどこにどのように書けばいいですか? 今はform aのloadに一つ書いてます。 class Configurations { 各コンボボックスに入れるべき値をそれぞれプロパティとして定義 } interface IConfigurationsSource { Configurations GetConfigurations(); } class ExcelConfigurationsSource : IConfigurationsSource { private readonly string book; private readonly string sheet; public ConfigurationsSource(string book, string sheet) { this.book = book; this.sheet = sheet; } public Configurations GetConfigurations() { return Excelシートから読み取ってConfigurationsに詰めて返す(book, sheet); } } こういうのを作って使い回す クラスを継承して機能を共通化するのとインターフェースで共通化するのと何が違いますか? いろいろなレベルでの回答があるが インターフェースはMIX可能 継承の濫用は保守困難になりがち インターフェース意識した方が設計的にスマートな事が多い c#8で事情は大きく変わるが クラス継承は切り離せないが、インターフェースなら切り離せる。 >>493 即レス感謝です 勉強になります ありがとうございました >>512 レベルが高過ぎてさっぱりです。 これはクラス追加してクラスに書く感じですかね? クラス=VBのモジュールって感じでいいんですかね? >>514 > c#8で事情は大きく変わるが C#8ではnull非許容が標準になるという噂は聞いたことがあるのですが、 この話は検索してみてもなんのことを仰っているのか分かりませんでした とても興味があるので、ぜひ詳しく教えていただけないでしょうか >>521 インターフェースのデフォルト実装が導入されることかな。 .NET ランタイムにも手が入るそうな。 >>522 レスありがとうございます! ただこれだけを聞くとC#8でインターフェースの価値が更に上がるように思うのですが、 >>514 さんはインターフェースの価値を説かれた上で 「c#8で事情は大きく変わる」と仰っていているので、他の機能に拡充が図られるなどで インターフェースの価値が相対的に下がると仰っしゃりたいように感じました 実際にはそういうわけではないのでしょうか? いずれにしても、インターフェースのデフォルト実装は便利そうで楽しみです あと、それほどいろいろと手を入れるなら、 IList<T>が共変なIReadOnlyList<out T>と反変なIWriteOnlyList<in T>を 継承するようにするとか、そういう変更もあると嬉しいな〜と素人ながら思ってみたりw >>523 IWritableListとIReadableListみたいな名前ならともかく、 それじゃわざわざOnlyって強調した単語使ってる意味がなくなるから悪手だろ >>525 既にList<>はIReadOnlyList<>を実装してるんだから今更だろ。 IList<>がIReadOnlyList<>を継承できない理由は、インターフェイスメンバの明示的実装を壊すから IList<>に宣言されてたメンバのうちIReadOnlyList<>と被るものを全部削除したとしたら、IList<>のメンバを明示的実装している既存のクラスが全滅する 誤解を与えてすまん c#8でインターフェースのデフォルト実装がサポートされるので価値は高まるという認識でok null不許容も含めて大きく変わるねえ null非許容を乱暴に説明すると 参照型の変数にnullが入らないのがデフォになる。よって多くのシナリオでnull落ちになるケースが激減する。基本的にプログラミングが楽になる。 変数にnull許可する場合には明示的に宣言が必要になる。 既存のソースに対しては破壊的変更になるからコンパイルオプションとかになるんじゃないかな。 OOP的にも綺麗でテーブルが正規化されてればnull非許容は受け入れられるかもね 業務システムではあまり役に立たなそうだ >よって多くのシナリオでnull落ちになるケースが激減する。基本的にプログラミングが楽になる。 岩永氏の例の記事にもそう書いてあるが、何度考えてもこれは逆だと思うなw いわゆる「例外を握りつぶす」筋悪コードと同じ弊害をもたらすだけだろう 凄まじい列数でほとんどがnullのテーブル あれをなんとかしないとアプリケーションからnullを排除することは難しい インフラの問題だからホスト言語のちょっとした改善でどうにかなるものじゃない 最近の言語がそういう流れだからだろうね DB絡みに外部結合やORM、既存ライブラリやサービスがある以上、null考慮は回避できないだろうから使い分けになるだろうね nullまみれのテーブルも いまだにみかけるし 新規コードでサクサク組んでいくには便利やと思う >>525 レスありがとうございます 確かに、ReadOnlyという言葉がIReadOnlyList<>を継承するものにかかっていると考えると IList<>がIReadOnlyList<>を継承するのは妙な感じですね ただ現実として、>>526 でも指摘していただいているようにList<>はIReadOnlyList<>を 実装していますので、ReadOnlyという言葉はあくまでIReadOnlyList<>自身にかかっていると とらえてしまってもいいのかなと考えています その現状の言葉遣いが間違っているのだから直すべきだというご主張なら、 実現可能性は私には難しくて分かりませんが、とても興味深いご意見だと思います >>526 レスありがとうございます 書いていただいた文章を読むと、インターフェースは継承元のインターフェースと 同じ名前のメソッドを持てない、もしくはインターフェースの明示的実装に悪影響があると 考えていらっしゃるように見受けられたのですが、この部分がよく理解できなかったので 申し訳ないのですが詳しくご説明していただけるとありがたいです >>527-528 レスありがとうございます 私の方こそ、変な深読みをしてしまい失礼しました 私は初学者なので機能の増強は単純に楽しみなのですが、 既存のソースを多くお持ちの方にとっては大幅な変更はいいことばかりでもないのですね >>528-531 興味深いお話をどうもありがとうございます 自分からnull非許容の話を出しておいて恥ずかしいのですが、 実はこれが具体的にどういうものなのかほとんど理解できていないのです var a = new string[1]; は許されるのか?とか、許されるならそれは var a = new string[1] { string.Empty }; と同じ意味なのか?とか、 もしそれが正しいなら、クラス毎に Empty 的なものを用意しないといけないのか?とか 疑問は膨らむばかりです シンプルなコードで良い疑問やなあ 実際導入されたら混乱しそう… 右辺のArrayがnullを許さないからコンパイラに怒られそう 初期値入れたらいけそう もし仮にstringの規定値がemptyになる仕様になれば初期化無しでもコンパイルとおるかも c#7系以前と同じ挙動にするなら var a = new string[1]?; という記述になるはず List系使うから配列を生で使う機会は減ったけどね C#の話じゃないかもしれませんが、 LAN上の他のPCと通信するにはTCPorUDPしかないですかね? ポート開けようとすると管理者のパスワード要求されるので そういうのに影響されない方法があれば教えてください サーバー上にファイル作って共有しようかとも思ったのですが ロックとか速度とかちょっと使いにくいので インターネットに出れるんならAWSでSQSかKinesisでも使えば レイヤー無視なら Multi-object Multi-lingual Document Intermediary の仕様書でも >>536 TCPやUDPじゃないと関所を通れないからなぁ ポート開けたくないな、名前付きパイプのRemotingは? sambaのポートが開いてりゃ疎通できた気がする。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる