09/02/19 22:10:30
.NET Framework 3.5 Service Pack 1
インストールしようとしたら、
「この製品はWindows2000にはインストールできません。
どうしてもインストールしたかったら、XP以上にアップグレードしてください」
ってメッセージが出てきたんだが、どうすればいい?
674:デフォルトの名無しさん
09/02/19 22:12:08
もう答えを知ってるじゃないか
675:デフォルトの名無しさん
09/02/19 22:13:02
どうしたい?
1. XP入れる。
2. .NET Framework 2.0 SP2でお茶を濁す。
676:デフォルトの名無しさん
09/02/19 22:15:36
>>673
C#3.0やLinqを使いたいだけなら、MONOという手もなくはない
677:デフォルトの名無しさん
09/02/19 22:18:05
3.C#を諦める。GAME OVER
678:デフォルトの名無しさん
09/02/19 22:19:07
ゲームだったのかぁぁ
679:デフォルトの名無しさん
09/02/19 22:34:13
small basicというものを入れようとしたら、
「.NETを入れてください」
というメッセージが出てきて、それをいれようとしたら
2000ではダメだ、といわれた。
small basicは2.0 SP2でも動くのかなぁ?
680:デフォルトの名無しさん
09/02/19 22:37:36
MS製の教育用のやつ?
Small BasicはWPF使いまくってるから古い.NETやMONOでは絶対動きません
681:デフォルトの名無しさん
09/02/19 22:43:12
>>680
そしたらXP購入コースかなぁ
682:デフォルトの名無しさん
09/02/19 22:53:08
WPFはVistaにしとけ
Vista動かないならWPFなんかどうせまともに動かん
Small Basicにはそんな価値は全く無いけど
C#使うならXP以降でないと話にならない
683:デフォルトの名無しさん
09/02/20 00:48:53
「部長!うちのVB6製品もそろそろ.NETに移植しないとやばいです」
「そうだな。だがうちの製品の顧客はNT4と2000もいるから、.NETとやらは平気なのか?」
「そんなやつらは旧バージョンを引き続き保守してお使いいただきましょうよ」
「じゃあお前2本分働け」
がーん。
684:デフォルトの名無しさん
09/02/20 01:14:55
Visual C# 2008について質問です。
メーラーを作っています。
設定を簡単にするために、Outlook Expressのsmtpサーバー、Port、ID、Passwordの4項目を引き継ぎたいです。
どこに格納されていて、どう読めばいいか、教えてください。
685:デフォルトの名無しさん
09/02/20 01:21:02
世のメーラーでOutlookの設定を自動で使える奴ってあるの?
686:デフォルトの名無しさん
09/02/20 01:26:51
Thunderbirdのソース読めばいいよ
687:デフォルトの名無しさん
09/02/20 01:29:50
無理だろ
そんなのが取得できたら勝手にメール読み放題ウイルスとか作れちゃうじゃん
688:デフォルトの名無しさん
09/02/20 01:36:05
いやいや
他のマシンの設定情報読んだり書き換えたりするわけじゃないんだから
689:デフォルトの名無しさん
09/02/20 01:39:34
女子高生エロエロ動画.avi .exe
とか実行しちゃったらやばいんじゃん?
690:デフォルトの名無しさん
09/02/20 02:10:45
パスワードデコードできたらヤバイねw
691:デフォルトの名無しさん
09/02/20 02:37:41
アセンブリのあるディレクトリのURI形式じゃない普通のパスを取得する標準的な方法ってありますか?
とりあえず、文字列処理で
System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Substring(8).Replace('/','\\').Replace("WMPEmitMiku.DLL","");
ってやってるんですが、何ともダーティーで。
692:デフォルトの名無しさん
09/02/20 03:14:08
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
string dirpath = new FileInfo(path).DirectoryName;
Console.WriteLine(path);
Console.WriteLine(dirpath);
693:デフォルトの名無しさん
09/02/20 06:21:11
Outlook Express 使ってないから知らんけど、Protected Storage に入ってるんじゃね?
URLリンク(codezine.jp)
smtp とかその辺は、レジストリにありそう。
694:691
09/02/20 09:08:44
>692
LocationプロパティはMSDNにマニフェストがどうちゃらと書いてあって良く分からなかったのですが
UNCパスが取れるのですね。助かりました。ありがとうございます。
695:デフォルトの名無しさん
09/02/20 11:04:15
C#2.0で Socket.BeginConnect メソッドを使ってサーバに接続しています。
上記メソッドを使う時にタイムアウトの時間を指定とかできないんでしょうか?
接続に失敗したとき AsyncCallback で指定した部分に来るのが遅すぎるのでちょっと困っているのですが・・・
補足:
System.Net.Sockets.SocketException:
接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
この情報を早く取得してタイムアウトエラーを出したいのです。
696:デフォルトの名無しさん
09/02/20 12:29:53
みなさんありがとうございました。
リンク先をたどってHideSeek(シェアウェア)を試して、パスワードを含むOutlookExpressの設定データを読めることはわかりました。読めるだけでテキスト書き出しはできないです。
フリーでは、Protected Storage PassViewというのがあるらしい。そのひとつのmailpv.exeを使ったら、簡単にテキスト書き出しもできるので、これを使ってProcess(mailpv.exe)とかもありかもなと思いました。
気軽に「こんなソフトありませんか?」ならこれで終了です。
おっしゃるとおり、Protected Storageに入っているようです。
これは既存のプログラムやC++なのですが、C#の方法は?
C++だと、
PStoreCreateInstance = (TPStoreCreateInstance)
GetProcAddress(hDll,"PStoreCreateInstance");
と書くところを、C#で書ければいいのかなと思うのですが、で、どう書きゃいいんでしょう?
まずは、Windows\System32\Pstorec.dllを参照に追加して。
としようとしたら、「C:\Windows\System32\Pstorec.dllへの参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください」とかいわれてます。
697:デフォルトの名無しさん
09/02/20 12:35:36
アンマネージDLLの呼び出しで検索したらヒントになるかも
698:デフォルトの名無しさん
09/02/20 12:49:16
URLリンク(pinvoke.net)
こういうサイトがあってPstorec.dllもリストされているんだけど、そのAPIは検索しても出てこないね。
まだ完全網羅はされていないのかな。
699:デフォルトの名無しさん
09/02/20 13:52:01
コードでリソースに新規文字列と値を追加、削除、編集するような処理はないでしょうか?
作成したSQLServerへの接続文字列を追加し、グローバル的に使いたいのですが・・
もしくは他にいい方法があるようでしたら教えて下さい
700:デフォルトの名無しさん
09/02/20 15:30:47
class グローバル変数{
public String 接続文字列1 = null;
public String 接続文字列2 = null;
…
public String 接続文字列100 = null;
}
701:デフォルトの名無しさん
09/02/20 15:32:02
修正
public static String 接続文字列1 = null;
おれとしたことが
702:デフォルトの名無しさん
09/02/20 16:01:44
>>700
クラスですか
ちょっとそっちでやってみます
ありがとうございました
703:デフォルトの名無しさん
09/02/20 16:24:36
スタックオーバーフロー起こすのでスタックサイズを大きくしたいのですがどうすればできますか?
704:デフォルトの名無しさん
09/02/20 16:26:02
>>703
プログラムを書き換える
705:デフォルトの名無しさん
09/02/20 16:28:13
>>699
リソースは知らんけど、設定なら簡単に編集できるんだけどなぁ。2008でね。
追加、削除はしらない。
706:デフォルトの名無しさん
09/02/20 16:42:16
>>699
接続文字列程度なら暗号化して適当な設定ファイルにでも書き込むってのは?
ウチは大体XMLでやってるけど
707:デフォルトの名無しさん
09/02/20 16:43:01
Byte配列の中身を検索したいんだけど便利な関数ってありますか?
708:デフォルトの名無しさん
09/02/20 16:45:12
どう検索したいんだ…
普通にループで見て回るとかじゃなくって?
709:デフォルトの名無しさん
09/02/20 17:16:42
文字列で"テキスト"を検索するみたいに、
16進の"0x01 0x02 0x03 0x04"をまとめて検索できないかと思って・・・
710:デフォルトの名無しさん
09/02/20 19:43:15
前スレで見事に同じ質問を見たな
711:デフォルトの名無しさん
09/02/20 19:51:37
VisualStudio2008でApplication.DoEvents();を使うと応答ナシになって帰ってこない時が
あるので、使わない方法を調べてるんですけど、以下のようなコードだと実行すらされて
いない感じなんですけど、原因わかりますでしょうか?
private IEnumerable<int> SiteCheck(WebBrowser webBrowser, string url)
{
webBrowser.Navigate(url);
while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
yield return 100;
// Application.DoEvents();
// ThreadSleep(100);
// これとおなじ
}
}
712:デフォルトの名無しさん
09/02/20 20:00:06
yieldはforeachをサポートするために使うもの。DoEventsの代わりではない。
タイマイベントでforeach (var dummy in SiteCheck(browser, url)) ;
とかしたら動くかもしれないけどかなり変態的な手法なのでお勧めできない。
713:712
09/02/20 20:04:00
訂正
タイマイベントでforeachはおかしいな
IEnumerator<int> state;
void Start() { state = SiteCheck(browser, url); timer.Start(); timer.Interval = 100; timer.Tick += timer_Tick; }
void timer_Tick() { state.MoveNext(); }
あえてやるならこんな感じかな
714:デフォルトの名無しさん
09/02/20 20:18:21
その昔、yield という API があってな・・・ Win16 の頃か・・・
715:デフォルトの名無しさん
09/02/20 21:16:26
DBにあるCLOB型カラムのデータをoledbを使用してstringで取得したいと考えていますが、
「データ型はサポートされていません」とのエラーがでて上手くいきません。
oledbではCLOB型の取得を行えないのでしょうか。
----環境----
DB:Olacle10g
.NET:3.5
----ソース----
OleDbCommand command = new OleDbCommand("select clobColmun from clobtable", connection, transaction);
OleDbDataReader dr = command.ExecuteReader();
if(dr.Read())
・・・
716:デフォルトの名無しさん
09/02/20 21:19:58
ODP.NET 使え
717:デフォルトの名無しさん
09/02/20 21:22:49
oledb clobでググれば情報はいくらでも見つかる
oledbでclobが扱えないんじゃなくて、
select使ってstringでとろうとするのが無理
718:デフォルトの名無しさん
09/02/20 21:24:23
>>716
現状システム全体がOLE DBで動いているため、
この部分のみODP.NETを使うというのは厳しい状況です・・・
719:デフォルトの名無しさん
09/02/20 21:33:16
>>717
if文以降でOleDbDataReader#GetBytes()でバイト配列を取得→stringへ変換という処理を想定していたのですが、
例外は以下の行で発生しているため、原因が特定できずに困っています。
OleDbDataReader dr = command.ExecuteReader();
>select使ってstringでとろうとするのが無理
という事は
OleDbCommand command = new OleDbCommand("select clobColmun from clobtable", connection, transaction);
の行自体に問題があるのでしょうか。
先ほどからググり続けているのですが、ピンとくるヒントが中々見つかりません・・・
720:デフォルトの名無しさん
09/02/20 22:16:00
OracleならSQL内でTO_CHARできないの?
721:デフォルトの名無しさん
09/02/20 22:44:44
>>719
検索すると似たような質問があるね。BLOBの質問だけど
URLリンク(202.218.219.160)
結局
>BLOB 型だと PL/SQLパッケージを使用する以外に方法が無かったかも知れません。
とかいってて、うまく解決できてないみたい
722:デフォルトの名無しさん
09/02/21 03:15:09
ググったり色々試してみましたが現時点では出来ないに近い判断を下すしかないようです
一部できそうな内容も見つかりましたが、現状の問題の解決には至りませんでした
ありがとうございました
723:デフォルトの名無しさん
09/02/21 03:34:45
>>695
基本的にできないよ
724:デフォルトの名無しさん
09/02/21 06:07:34
System.Diagnostics.FileVersionInfo.GetVersionInfo で取得出来ないバージョン情報はどうやって取得すればいいんでしょうか?
例えば、火狐のBuildIDとかです
WinAPIなら取得出来るんですけど・・・
725:デフォルトの名無しさん
09/02/21 11:23:00
>>724
ならAPI使えばいんジャマイか
726:デフォルトの名無しさん
09/02/21 12:21:39
int a = new int();
a.ToString;
を
(new int()).ToString;
とかくことはできますか?
727:デフォルトの名無しさん
09/02/21 12:25:31
何故自分で試してみない
728:デフォルトの名無しさん
09/02/21 12:25:46
できるけど0.ToString();と同じだよ
729:デフォルトの名無しさん
09/02/21 12:26:24
書ける
730:デフォルトの名無しさん
09/02/21 12:29:43
この場合どうやってインスタンスにアクセスするんですか?
デリゲートがなければ行方不明になる書き方のようなきがするんですが
731:デフォルトの名無しさん
09/02/21 12:31:24
usingは名前空間を省略するできるようにするためにあるんですよね?
Dispose() メソッドが呼び出されるように書く為とはどういうことですか?
732:デフォルトの名無しさん
09/02/21 12:37:24
>>730
アクセスできない
実際行方不明になる
>>731
using (Bitmap bmp = new Bitmap(width, height)) { bmpに対する処理 }
と書くとスコープを抜けたときに自動的にbmpがDisposeされる
たまたま同じusingキーワードを使ってるだけで全くの別物
733:デフォルトの名無しさん
09/02/21 12:38:01
名前空間省略に使うusingとDisposeの方は全く別物
URLリンク(msdn.microsoft.com)(VS.80).aspx
using(obj)
{
ウントカカントカ
}
って書くとスコープを抜けるときにDisposeを呼ぶ。
ダック…ではなかったような気がする。
734:デフォルトの名無しさん
09/02/21 12:44:59
ありがとうです。
それってDisposeを呼べば済むことじゃないんですか?
わざわざ紛らわしい名前を付けてまで自動的に呼ばれるようにする理由はなんですか?
735:デフォルトの名無しさん
09/02/21 12:46:16
>>733
thx読んできます
736:デフォルトの名無しさん
09/02/21 12:46:58
Disposeって書きたくないから
スコープを分離するため
737:デフォルトの名無しさん
09/02/21 12:48:12
>>734
Disposeを呼ぶときはかならずこういう風に書く必要がある
try { objを使う } finally { obj.Dispose(); }
こうしないと例外が発生したときにDisposeが呼ばれない
毎回こんなの書くのは面倒だから
738:デフォルトの名無しさん
09/02/21 12:49:01
しかしまあ確かに別の機能をなんで同じ名前にしたのかは謎だわな・・・
739:デフォルトの名無しさん
09/02/21 12:51:25
>>737
なるほど、deleteをデストラクタに書くようなものですね。
理解できましたありがとうございました。
740:デフォルトの名無しさん
09/02/21 13:16:54
C++って例外の時デストラクタ呼ばれたか?
741:デフォルトの名無しさん
09/02/21 13:25:04
その点については、C++/CLIはとっても楽。
742:デフォルトの名無しさん
09/02/21 13:45:00
>>725
API使おうと思ってググってみると頭おかしいんじゃないかって人のページに当たるので躊躇ってました
昨日からC#触り始めましたがC++先にやったからなのか痒いところに手が届かないことがしばしばありますね
C#はもうちょっと時間が経ったあとにやってみます
ありがとうございました
743:デフォルトの名無しさん
09/02/21 14:38:53
>>740
れる。
744:デフォルトの名無しさん
09/02/21 16:18:42
というか finally が仕様にないので呼んでくれないと
駄目という大前提が
745:デフォルトの名無しさん
09/02/21 16:20:22
finallyも必ず呼ばれる保証は無かったりする
746:デフォルトの名無しさん
09/02/21 16:24:55
public bool this[int cols, int rows] { get; set; }
このthisはどういう意味なんですか?
bool型変数thisの動的配列ってことですか?
動的でいいんでしょうか?
747:デフォルトの名無しさん
09/02/21 16:26:30
>>746
indexer
748:デフォルトの名無しさん
09/02/21 16:26:49
それはインデクサ
get;set;ってあるとこからプロパティだと推測しろ
749:デフォルトの名無しさん
09/02/21 16:27:57
>>745
StackOverflowExceptionがそうなのだけど、
CLR2.0からはcatchも出来なくなったからもうどうでもいい。
750:デフォルトの名無しさん
09/02/21 16:31:29
CriticalFinalizerObject使うのが確実らしいよ
751:デフォルトの名無しさん
09/02/21 16:45:46
まあ、例外処理は、正規のロジックを分離するのが本分であって、予想外の事態に対処するってのは
使い方が違うからねえ。
752:デフォルトの名無しさん
09/02/21 17:11:22
WebClientクラスのUploadFileメソッドはファイルのみFTPに転送できて、フォルダは転送できないのでしょうか?
フォルダを転送するにはどんな命令を使えばいいですか?
753:デフォルトの名無しさん
09/02/21 17:13:43
UploadFolder
754:デフォルトの名無しさん
09/02/21 17:20:49
ありがとう
インデクサわかりました
クラス = {1,2}
としてあればインデクサで指定してある方法で代入とかできるんですね
でもフィールドが2つあったらどっちに代入されるんですか?
755:デフォルトの名無しさん
09/02/21 17:26:08
それはコレクション初期化子といって,インデクサとは関係ない
var list = new List<int> { 1, 2 }; は
var list = new List<ind>(); list.Add(1); list.Add(2);と同じ
756:デフォルトの名無しさん
09/02/21 17:27:04
だから、thisという特別な名前しかインデクサには使えないのさ。
757:デフォルトの名無しさん
09/02/21 17:33:05
わかりました。インデクサって中でフィールドに代入する実装を書かなきゃいけないんですね
一番上のフィールドに自動的に入るとかかと思いました。ありがとうございました
758:デフォルトの名無しさん
09/02/21 17:43:42
>>757
ひょっとして、プロパティに関して自動プロパティしか知らない?
堅気のプロパティを知ってから自動プロパティを使った方が良いよ。
public int A{get; set;}
みたいなのしか書いた事ないなら、
private int a;
public int A{get{return a;} set{a=Value;}}
をまず知っておくべき。
759:デフォルトの名無しさん
09/02/21 18:02:08
>>753
WebClient wc = new WebClient();
wc.UploadFolder(?);
としようにもUploadFolder自体がWebClientの定義に含まれていないとエラーが出たんですが、どういうことですか?
760:デフォルトの名無しさん
09/02/21 18:05:17
フォルダはアップロードとかいう類のもんじゃない
FTPならMKDコマンドか、WebClientで使えるのかな
761:デフォルトの名無しさん
09/02/21 21:08:28
環境はVisualStudio2005です。
ジェネリックコンテナのListやDictionaryで、
C++のstlにあるfront()やback(),
リバースイタレータの機能ってどうやって使うのでしょうか。
762:デフォルトの名無しさん
09/02/21 21:13:52
Dictionaryには順番という概念がないので無意味
リンクリストはLinkedList<T>
逆順に列挙するにはforeach (var item in ((IEnumerable)list).Reverse())のようにする(LINQ)
763:デフォルトの名無しさん
09/02/21 21:23:22
ふむふむ。Dictionaryてハッシュなのですね。
C#で二分木に相当するコンテナってのはあるんでしょうか。
764:デフォルトの名無しさん
09/02/21 21:24:51
iterableじゃなくてenumerableで、概念上はforeachの中身は各要素に対して一回だけ
実行されて順番は未定義、foreachの中身は可換な操作のみ可、であるはずなのに、
何故かEnumerable.Reverse()がある不思議。実用上は仕方がない事とは言え。
俺としては、本当に順番は未定義にして、foreachの中身が可換な操作の場合のみ結果が
定義されるとした上で、並列実行なんかをサポートしてくれた方が嬉しいんだが・・・
まあ、内部的にIEnumeratorのMoveNext()使っている限りはどうしようもない望みなわけだが。
765:デフォルトの名無しさん
09/02/21 21:37:50
SortedDictionaryとかは内部的に二分木のはず。
766:デフォルトの名無しさん
09/02/21 21:46:12
>765
おお、ありがとうございます。
でも、先頭要素や末尾要素の取得が出来ません。
MSDNみてるとExtensionのメソッドというので取得できるみたいですが・・・
URLリンク(msdn.microsoft.com)
このExtensionのメソッドってどうやれば使えるのでしょうか。
インテリセンスでは出てこないので、何かしなきゃいけないみたいで・・・。
767:764
09/02/21 21:48:25
そういえば、Enumerable.Reverse()の実装をリフレクタで見てみたら、一度全部列挙して
配列にコピーする鬼実装になっていたような気がする。LinkedListが泣いている・・・
768:デフォルトの名無しさん
09/02/21 21:48:56
SortedListはインデックスで要素取得できるからそんなのいらない
Reverseなどはusing System.Linq;をファイルの先頭に追加すると使えるようになる
769:デフォルトの名無しさん
09/02/21 21:51:26
>767-768
(;´Д`)もしかして、stl使ったほうがよさげ?
770:764
09/02/21 21:59:10
>766
「拡張メソッド」の訳をさぼったっぽい。
System.Linq.Enumerableクラスの一連のメソッドは第一引数が
this IEnumerable foo
ってなっていて、実際にはIEnumerableを実装しているクラスノインスタンスメソッドのように
使える。C++のSTLで言う「アルゴリズム」みたいなもの。IEnumerableを実装していればみんな
同じ事ができる。ただし、内部的にIEnumeratorを使った列挙にまで落とし込まれるので、
>>767
に書いたみたいに順序付けられて先頭と末尾を持つコンテナの特性は活かされない。
>>768
SortedListはインデックスがある分、要素の追加がO(n)かかる。
実は、本当の意味での二分木ってないんだよね。
SortedDictionary:内部構造は二分木なのにバイナリサーチがない(あれば先頭、末尾を
取得するメソッドがなくても最悪O(logN)で先頭、末尾に辿り着ける)
List, SortedList:バイナリサーチあり。ただしインデックスを持っているので追加、削除
にO(N)かかる。
orz
俺は、スキップリストを自分で実装して二分木の代わりに使っている。確率的アルゴリズムで
もって局所的な操作を行っても平衡二分木状である事が保障され続けるナイスなデータ構造。
771:デフォルトの名無しさん
09/02/21 22:15:06
Microsofot公式の本でも紹介されていたけど、
WintellectがいろいろSTL風のコレクションを作っているらしい。
URLリンク(d.hatena.ne.jp)
772:デフォルトの名無しさん
09/02/21 22:17:51
あ、SortedDictionaryのバイナリサーチがないってのは、IEnumerableに対する
System.Linq.Enumerable.First拡張メソッドを使っても二分木構造が活かされないって意味ね。
キーが既に含まれているかどうかのバイナリサーチは(拡張メソッドじゃなくて)クラスのメソッド
として実装されている。でも、それじゃ役に立たない場面が多い。
773:763=766=769
09/02/21 22:27:41
皆さんありがとうごさいます。
拡張メソッドも、STLもC#2.0では使えないようなので、
今ある機能で間に合わせることにしました。
先頭要素の取得は↓のような感じで。
SortedDictionary<Key, Value>.Enumerator e = contaner.GetEnumerator();
e.MoveNext();
return e.Value;
でも、なんかもやもやする・・・
774:デフォルトの名無しさん
09/02/21 22:32:56
あ、SortedList.Enumeratorの実装次第では、System.Linq.Enumerableクラスが
拡張メソッドとして提供するFirstメソッドは高速(少なくともO(log N)、最初のノードを
内部で保持していればO(1))である可能性があるね。その代わりLastは内部で全部列挙
しやがるんだろうなあorz
775:デフォルトの名無しさん
09/02/21 22:35:03
>>773
大丈夫、拡張メソッドFirstの内部実装はそれだ。で、Lastの内部実装は>>774だ。
でも、そんなにSTLやアルゴリズムが好きなら、LINQ to Object(さんざん出ている
System.Linq.Enumerableクラスが提供する拡張メソッドのことね)は確実に
気に入ると思うよ。まだまだ足りない物は確かに多いんだけど。
776:デフォルトの名無しさん
09/02/21 22:52:57
LINQ to Objectは気にいりそうな気がしますが
VS2008からみたいなので諦めます。
でもListの末尾要素を順序探査して拾うってのは、
ちょっとひどいような(;'A`)
将来的には改善されるとは思うので、
LinqがあるVS買ったら書き換えるようにします。
777:デフォルトの名無しさん
09/02/21 23:09:02
>>773
ねえ、それで、「順序に関する」最初の要素ってちゃんと取得できてる?
気になってリフレクタでSortedDictionaryの実装を見てみたんだけど、
内部でTreeSet<T>っていうinternalクラスを使っているのね(赤黒平衡木っぽい)。
で、GetEnumeratorするとこのTreeSetのGetEnumeratorに丸投げされて、
ResetしてMoveNextしてCurrentを参照するとルートノードが返される実装になって
いるっぽいんだが。
このTreeSet<T>をpublicにしてくれれば>>773のもやもやも解消するだろうになあ。
これはモノホンの平衡二分木になっている。それで、
InOrderTreeWalk(TreeWalkAction<T> action)
ってメソッドがあって、どうやら、条件式によって[a,∞)の形の区間を指定してその区間
に含まれる最初のノードを探索してくれるみたい。ただし、結局逆順の探索は実装されて
ない。orz.
>>776
Express Editionは無料ですよ。確か2005と共存もできるし。とりあえず入れて見たら?
業務での開発?
778:777
09/02/21 23:11:09
あ、問題ないみたいだ。ごめん。左に左にと進みながらスタックにpushしている。
779:デフォルトの名無しさん
09/02/21 23:18:51
>777
趣味の開発なのですが、Expressエディションだと
クラスデザイナが使えないようなので手をだしてません。
リファクタ機能とクラスデザイナの使い心地試すのを
第一優先でC#に手をだしてるものでして・・・。
780:デフォルトの名無しさん
09/02/21 23:42:46
Expressにリファクタ機能ないんだ!!
781:デフォルトの名無しさん
09/02/21 23:49:43
あるよ
782:デフォルトの名無しさん
09/02/22 01:18:03
手元のC#2008EEだと、
リファクタ(R) → 名前の変更, メソッドの抽出
しかないな。
インテリセンスはちゃんと効くけど
783:デフォルトの名無しさん
09/02/22 01:27:48
Enumerableの実装がどうこうとか言っている暇があったら、
自分で(拡張メソッドを)オーバーロードすればいいのに
まあ、これくらい標準で用意してくれという意見なら賛成するが
public static ListEx {
public static T First<T>(this IList<T> list) { return list[0]; }
public static T Last<T>(this IList<T> list) { return list[list.Count - 1]; }
public static IEnumerable<T> Reverse<T>(this IList<T> list) {
for(int i = list.Count - 1; i >= 0; i--) yield return list[i];
}
}
784:デフォルトの名無しさん
09/02/22 01:32:56
拡張メソッド使えるなら、全部あるよ。
URLリンク(msdn.microsoft.com)(VS.95).aspx
785:デフォルトの名無しさん
09/02/22 01:43:57
>>782
それだけあれば十分じゃね?
つか、それしか使ったことない気がする
786:デフォルトの名無しさん
09/02/22 01:51:09
>>784
そうじゃなくて、IEnumerable<T>を想定した(汎用的で効率の悪い)実装ではなく、
IList<T>、etc. 専用に効率の良い(かもしれない)実装**も**用意してくれという話
てか、最初の単語くらいは見てくれよw
787:デフォルトの名無しさん
09/02/22 06:25:47
>>783
もちろんそれで良いんだけど、まさに、「標準で用意してくれ」って意見なんだよね。
それと、SortedDictionaryだと>>773みたいに列挙の必要はないのにEnumerator
をとることになって格好悪い。
具体的には、IEnumealeは順序を保証しない列挙に特化(Reverse, First, Lastなし, その代わり
foreachの並列実行サポート)して、IOrderedEnumerableみたいなインタフェースを追加する。
こいつには順序に従った区間(-∞,a]と等価なbool値デリゲートおよび探索開始ノードを取るLast,
順序に従った区間[a,+∞)に等価なbool値デリゲートおよび探索開始ノードを取るFirst, 及び順序に
従って前方、後方に移動できるIOrderedEnumeratorを与えるGetOrderedEnumeratorメソッドが
あって、順序があって先頭・末尾があるコレクションはこいつで表現される。そんでもって標準で
拡張メソッドで``アルゴリズム''を提供する。これが一番みんなが幸せになれるんじゃないかな。
LINQに慣れると、標準での汎用的なインタフェースへの拡張メソッドの提供という事の便利さが
身に染みる。
>>771も気になるけれど、IEnumerable<T>, IList<T>, ICollection<T>インタフェースへの
拡張メソッドによる実装なので、ツリー状の構造を活かしたバイナリサーtはなくって、IList<T>
のインデックスベースのバイナイサーチしかないみたい。それはそもそもList, SortedListにはある
以上魅力に乏しいよなあ。
788:デフォルトの名無しさん
09/02/22 06:48:47
ああ、IOrderedEnumeratorなんて作らなくても、ノードを与えて、前方、後方のノードを取得する
forward, BackメソッドをIOrderedEnumerableに含めれば良いのか。ますますSTLっぽくなってきた。
インタフェースの設計って難しいなあ。だから標準で(略)
789:デフォルトの名無しさん
09/02/22 11:15:26
実際FirstとかElementAtとかToArrayなんかはIList<T>の場合は特別扱いされるから
余計な心配はいらないよ
ソース読めばわかる
790:デフォルトの名無しさん
09/02/22 11:25:41
各要素の値を見る必要のないメソッドはすべてIList<T>に対して特別に最適化されてるみたい
791:787
09/02/22 12:52:08
どうにかして欲しいのはSortedDictionaryやLinkedListなんだ~~~。
と叫んでみる。順序と特別な探索の方法を持つデータ構造を活かす汎用的な
(C++の``アルゴリズム''的な)方法がないんだよ。
IList, IList<T>だったらそりゃ特別扱いもされているし、>>783のコードでも、
>>771のライブラリでも良い。
ただ、>>773のFirst()のコードは>>778によって、ルートからの探索でO(logN)で先頭ノードに
辿り着くので二分木の構造は結局活かされるみたいね。これはLINQの実装そのものだからLINQ
でも同じ。
792:デフォルトの名無しさん
09/02/22 13:32:49
いまcsvを読んでDataGridViewに表示しています。
さらに、csvのある項目から文字列を複数個生成し、それをArrayListに入れています。
そのArrayListをさらにFormのメンバ変数のArrayListに入れています。
「DataGridViewの1行のデータ」を使用するときは、表示されている情報のほかに、
上記のArrayListの文字列も使いたいのです。
今は選択された行のindexから、メンバ変数のArrayListからその行のArrayListを取り出して使っています。
これで動いているのでいいんですが、
たとえばDataGridViewの1行に直接不可視のカラムでArrayListを追加できれば、メンバ変数で別途管理しなくてもすむと思うんですが、
DataTableのColumnのAdd()で指定するDataTypeにはArrayListがありません。
こんなように、DataGridViewには非表示で、1レコードに紐付けて管理したいListやCollection等があった場合、
みなさんどう管理しますか?
793:デフォルトの名無しさん
09/02/22 16:19:20
Tag
794:デフォルトの名無しさん
09/02/22 16:54:16
PropertyGridと同じように普通にBrowsableAttributeが使えると思うんだけど、
そういうことじゃないのかね。
ほとんどDataGridView使ったことないもんで勘違いだったらすまんが。。
795:デフォルトの名無しさん
09/02/22 19:00:45
Visual C# Expressをインストールしました。
MS-DOSで.csファイルをコンパイルしようとしたけど出来ませんでした。
Pathが通っていないからだと思い、csc.exeを探したのですが見当たりませんでした。
796:デフォルトの名無しさん
09/02/22 19:03:37
それなら多分 .NET Framework を入れるだけでよかったのかも
PATH は \WINDOWS\Microsoft.NET\Framework\v2.0.50727
797:デフォルトの名無しさん
09/02/22 19:06:42
Visual Studio Toolsのコマンドプロンプトからやってみて
798:デフォルトの名無しさん
09/02/22 19:08:50
>>795
%frameworkdir%\%frameworkversion%にある
そんな環境変数見当たらなければ、%windir%\Microsoft.NET\Framework\v2.0.50727
799:デフォルトの名無しさん
09/02/22 20:26:57
XMLで出力されるドキュメントコメントをHTML形式とかで見るいいツール知らないでしょうか。
ndocとかいうのがぐぐるとひっかかったのですが、 2008では使えないみたいで。
800:デフォルトの名無しさん
09/02/22 20:32:56
Sandcastleとか
801:デフォルトの名無しさん
09/02/22 20:32:59
オナこいてる方も、女とやってる方も教えてくんろ
他アプリケーションのコントロールのハンドルを取得して、
そいつにPostMessageなんぞ使って、
要するにそのアプリをコントロールしたいんだわ
ところが、
SunAwtFrame
ってウインドウクラスのコントロール達の
ハンドルが取得できないどころか探せすらできない。
Spy++で見ても親ウインドウしか見つからない・・・。
これってJavaのクラス?
なんか良い方法はないでしょうか?
802:デフォルトの名無しさん
09/02/22 20:34:40
ほぼsandcastle一択。
素のままで使うのは大変なのでsandcastle help file builderをフロントエンドとして使うのが良い。
803:デフォルトの名無しさん
09/02/22 20:37:03
javaのコントロールってウィンドウハンドル持ってないんだっけ?
それならウインドウの中身を一枚の絵として描いてるだけなんだからどうしようもない
804:デフォルトの名無しさん
09/02/22 20:39:30
同じようなもので、IE のウィンドウがある。あれも一枚絵。
だけど、IE のウィンドウについては IHtmlDocument インターフェイスが用意されてる。
Java(Awt) に同じようなものがあるかは知らん。
805:デフォルトの名無しさん
09/02/22 21:23:46
>>798
というか今いれてという話なら 2008 じゃないかって気がするから
v3.5 の下だと思う > csc.exe
806:797
09/02/22 21:25:33
無視すんなコラ
807:デフォルトの名無しさん
09/02/22 21:25:46
よくわかってない人が来ました。
808:デフォルトの名無しさん
09/02/22 21:30:55
>>806
たしかVC++以外のエクスプレスには無かったはず。
809:デフォルトの名無しさん
09/02/22 21:34:33
>>803,804
おまえらありがと
ちょっくら違う手を考えてみる
810:デフォルトの名無しさん
09/02/22 22:14:59
>>802
質問者じゃないけど、これ知らなかった
今インストールして試してみたが、便利だな
利用させてもらうよ
811:デフォルトの名無しさん
09/02/22 22:25:01
>>810
コンソール版も同梱されているので、VisualStudioの外部ツールに
タイトル:Sandcastle Help File Builder
コマンド:C:\Program Files\EWSoftware\Sandcastle Help File Builder\SandcastleBuilderConsole.exe
引数:$(ProjectDir)$(TargetName).shfb
"出力ウィンドウを使用"にチェック
"起動時に引数を入力"にチェック
って感じで登録しておくと便利。
812:デフォルトの名無しさん
09/02/22 22:27:43
すげえええええええ
813:799
09/02/22 22:54:53
>>800, >>802
sandcastle使ってみました。
感動した。
ありがとうございます。
814:デフォルトの名無しさん
09/02/22 22:59:13
SandCastle使うと自分が適当に作ったライブラリが標準のライブラリと対等に見える不思議。
PresentationStyleはvs2005にするとMSDNと似たフォーマットになるよ。
815:デフォルトの名無しさん
09/02/23 00:22:45
C#2.0で質問です
親 ClassA→ClassB→ClassC 子
とクラスを継承していて、ClassCはインスタンスも生成でき、ClassCからの継承も可させたいけど、
ClassBやAから継承したクラスを作らせたくないようにしたり、直接、ClassBやAのインスタンスを
生成させたくない場合はどうすればいいですか?
クラスライブラリとして公開したいので、ClassCは自由に利用してもらいたいのですが、
ClassBとClassAは非公開にしておきたいのですが、どうすればいいでしょうか。
816:デフォルトの名無しさん
09/02/23 00:27:14
AとBをinternalにして、C をpublicにすればいいんじゃね?
817:デフォルトの名無しさん
09/02/23 00:29:31
そう思ったんだけど、
アクセシビリティに一貫性がありません。基本クラス 'ClassA' のアクセシビリティはクラス 'ClassB' よりも低く設定されています。
ってエラーで弾かれるのです(´;ω;`)ブワッ
818:デフォルトの名無しさん
09/02/23 00:32:03
AやB自体のアクセスレベルはpublicのままで
コンストラクタをinternalにする
.NET Frameworkのクラスでは多用されてるやり方
819:デフォルトの名無しさん
09/02/23 00:51:58
なるほど、そんなやり方があったんですね
ただ、それだとインスタンスが生成できないというだけで、
継承はできるので、継承元クラスのProtectedのメソッドが見えてしまったり、
インテリセンス(?)にIDE上ででてきてしまったりしますよね。
なるべく余計な情報を出したくないんですが、無理なら仕方ないのかな。
820:デフォルトの名無しさん
09/02/23 01:05:20
>>819
そもそも、それならClassAもClassBも必要ないはずだと思うんだけど。
全部ClassCに書けばいいじゃん。
派生できないベースクラスなど何の意味があるの?
ClassCという型の存在を隠したまま、そのインスタンスをClassAとして使わせたい、
ってのならよくわかるし方法もあると思うんだけど。
821:デフォルトの名無しさん
09/02/23 01:10:17
共通して利用する処理を基底クラスに書いておくってのは普通にないか?
クラスライブラリごとに開発チームが違うような場合
最も表面的なところしか見せたくない場合もあると思うんだが
822:デフォルトの名無しさん
09/02/23 01:19:29
うんだから派生クラスを隠したいというのなら話はわかるけど……、
と言ってるんですが。
823:デフォルトの名無しさん
09/02/23 01:30:17
継承を使わないで、委譲させればいいんじゃないかな?
824:デフォルトの名無しさん
09/02/23 01:36:23
いや基底クラスの関数群はそのチームでしか必要ないクラスだから
派生クラスだけ公開したいという場合もあるんじゃないか?
825:デフォルトの名無しさん
09/02/23 04:08:32
ドスプロントでコンパイルしようと思って、Path通そうとしたら、
C:\Program Filesの中にcsc.exeが見当たらなくて焦った。
C:\WINDOWSの中にあったのね。
826:デフォルトの名無しさん
09/02/23 07:51:09
ドスプロントとかいつの時代だよ
827:デフォルトの名無しさん
09/02/23 07:52:34
Win7にも絶賛登載中ですが
828:デフォルトの名無しさん
09/02/23 07:53:08
>>821
そういう場合、お作法としては、移譲、
要するに、ちょっと面倒だけどメンバーとして持って、
ClassA a;
void Foo() { a.Foo(); }
とする方がいいということになってる。
829:デフォルトの名無しさん
09/02/23 07:55:26
>>826
PowerShell が .NET に依存してて、
.NET が GUI 機能に依存してるから外すに外せないらしいね。
.NET Framework の GUI 外したバージョンも作って欲しいんだけどなぁ。
830:デフォルトの名無しさん
09/02/23 08:12:22
コマンドプロンプト仕えよ
831:デフォルトの名無しさん
09/02/23 08:17:41
このスレ的にMonoってどうなの
832:デフォルトの名無しさん
09/02/23 08:22:54
スレちがい
833:デフォルトの名無しさん
09/02/23 09:47:12
.NET Framework単体での質問スレが見つからなかったのでこちらに質問させて下さい。
.NET Framework Version 3.5 の新機能
URLリンク(msdn.microsoft.com)
にある
> Socket 名前空間に対する機能強化の一環として、一連のクラスが新たに追加されました。
とは具体的にどのクラスを差すのでしょうか?
834:デフォルトの名無しさん
09/02/23 13:37:43
C#でWiiリモコンの制御ってどうやるんですか?
参考になるサイトなどお教えください
835:デフォルトの名無しさん
09/02/23 17:30:24
>>834
まずはリモコンの素材について学んで来い
そしたら教えてやる
836:デフォルトの名無しさん
09/02/23 22:38:58
新しいものに対する拒否反応以上ではないような気がするな。
一度XAMLなしで簡単なプログラムを書いてみるといいよ。
やってる途中でバカバカしくなるから。
837:デフォルトの名無しさん
09/02/23 22:39:45
>>836
すまん、誤爆
838:デフォルトの名無しさん
09/02/23 22:49:42
気にするな
理解した
向こうにレスする必要なし
839:デフォルトの名無しさん
09/02/23 23:31:13
>>834
Managed Library for Nintendo's Wiimote でぐぐれ。
840:デフォルトの名無しさん
09/02/23 23:38:38
DataGridViewにて困っております。
バインドしたDatatableのデータを更新すると、
グリッドの方にも反映されますよね?
その時のセルを取得したいのですが、
CellValueChangedイベントで拾えませんでした。
何か方法よいありますでしょうか?
841:デフォルトの名無しさん
09/02/23 23:44:39
>>839
ジョークだと思ったら本当にあるのなw
842:デフォルトの名無しさん
09/02/23 23:59:13
>>840
rowdataboundイベントでe.rows.cellsとかで取得できないの?
843:デフォルトの名無しさん
09/02/24 00:09:52
>>841
日本だとMS製品と水と油な感じの派閥でも、
海外では.NETに前向きな雰囲気。
Wiimote以外にも、iPhoneで.NET(Mono)使うとか普通にやられてる。
844:デフォルトの名無しさん
09/02/24 00:11:24
>>842
DataGridViewには該当するイベントはないですね。
似たイベントを探しましたが、見あたりませんでしたorz
845:デフォルトの名無しさん
09/02/24 00:14:15
BindingSource_EndEdit()
CurrentCell
この辺
846:デフォルトの名無しさん
09/02/24 00:19:20
>>845
確認してみます。
847:デフォルトの名無しさん
09/02/24 00:22:15
> 834
このページにのってる
URLリンク(www.kosaka-lab.com)
質問する前にググれよ