C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 >>
■64628  Re[3]: 冗長コードの改善について
□投稿者/ howling -(2012/12/12(Wed) 12:04:05)
    No64627 (pang2 さん) に返信

    ほぼ同じ考えの方がいた…。
    今回の場合、呼び出すメソッドを文字列で判別しているようなのですが、
    pang2さんの例の場合で、0〜7の間に値を収めたい時はどのようにしますか…?

    なんとなく、以下の方法のいずれかを思いつきました。

    1.まず、メソッドの名称を、基本名 + インデックス値にする。
      以下、基本名の変数名はMethodBaseNameとする。

    2−A.基本名だけで切った文字列を、int.Parseで数値化する。
        int.Parse(string.SubString(MethodBaseName.Length));

    2―B.string.CompareToメソッドを用いて、
        string.CompareTo("MethodBaseName0")と呼び、
        これの戻り値で計る(但し、これだとMethodBaseName9までしか使えないか?)

    文字列自体は、Containsを使うなり、IndexOfを使うなりすればいける気はしたのですが、
    速い方法ってどれなんでしょうね…。
記事No.64625 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64635  Re[4]: 冗長コードの改善について
□投稿者/ れお -(2012/12/12(Wed) 15:48:20)
    shuさん pang2 さん howling さん
    みなさん回答ありがとうございます。

    情けないのですが C#のスキルが低いため回答の内容をどう具体的に展開したら良いのかがわかりません
    ただ、回答に登場する Reflection Delegate などのキーワードで調べるといろいろとヒントが
    見つかりましたのでそちらも参考にしながら前に進めて行きたいと思います。
記事No.64625 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64638  Re[5]: 冗長コードの改善について
□投稿者/ howling -(2012/12/12(Wed) 16:41:02)
    No64635 (れお さん) に返信
    とりあえずdelegateの書き方として…

    delegate double f(double[] Validate); //doubleの配列型の引数1個を持ち、戻り値がdouble型である関数をfという型として定義している。

    //この型の一例として、サンプル

    double calc_1(double[] dParams)
    {
    double dReturn = 0.0;

    //配列内の全ての値を加算する
    foreach(double param in dParams)
    {
    dReturn += param;
    }
    return dReturn;
    }

    f hoge = calc_1; //そうすると、これができる

    //これができると、これもできる
    double[] test = new double[] { 0.1, 0.2, 0.3 };
    hoge(test);

    /////////////////////////////////////////////////

    これの配列バージョンをpang2さんが書いてくれている。
    なお、2次元配列としている理由は、
    calc1なんちゃらと、calc2なんちゃらは別の部類の物だとして、区分けしてくれているため。

    …と思われます。

    いずれにしても、delegateはちょっと難しいので、色々読みあさるといいかもしれません。
    C++の関数ポインタに似ていますが、使い方はこれだけじゃないので…。
記事No.64625 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64621  例外処理の動きやInnerExceptionについて
□投稿者/ 悩み多きランナー -(2012/12/12(Wed) 00:56:51)

    分類:[C#] 

    2012/12/12(Wed) 01:04:14 編集(投稿者)

    C#における例外処理について下記のプログラムにおける
    下記質問の回答をお願い致します。
    <質問@>
    (*1)についてSystem.ApplicationExceptionを削除し派生クラスにしないとビルドエラーになりますが
    派生させないといけないということを単に覚えておくだけでよいのでしょうか?
    またコンストラクタの定義で: base("BbException : " + msg)や: base(msg, inner)は何を
    指すのでしょうか?

    <質問A>
    (*3)で"CallExceptionでエラーが出ました"の文字列と例外オブジェクトのeを
    (*2)のコンストラクタに渡してますが、こうすることで
    (*3)のBbException型のe2オブジェクトのmessageプロパティには
    "CallExceptionでエラーが出ました"の内容が格納されInnerExceptionプロパティで
    (*3)を発生させる原因になった(*4)のメッセージが格納されるという認識で
    よいのでしょうか?

    <質問B>
    Exception.InnerExceptionは現在の例外を発生させた Exception インスタンスを取得と
    目にしましたが、それは(*2)と(*3)の書き方をすることでExceptionインスタンスが
    Exception.InnerExceptionプロパティに格納されるということでしょうか?
    このように記述することで現在の例外を発生させた Exception インスタンスが格納
    されることがイメージしにくいのでお手数ですが解説の程よろしくお願い致します。

    class BbException : System.ApplicationException (*1)
    {
    public BbException(string msg)
    : base("BbException : " + msg)
    {
    }
    // innerException を使う用。
    public BbException(string msg, Exception inner) (*2)
    : base(msg, inner)
    {
    }

    }
    ------------------------------------------------------------
    class MyException
    {
    public void Test()
    {
    Console.WriteLine("Test() : メソッドが呼ばれました。");

    throw new BbException("エラーが出ました");      (*4)
    }

    public void CallException()
    {
    try
    {
    this.Test();
    }
    catch (Exception e)
    {
    BbException e2 = new BbException("CallExceptionでエラーが出ました", e); (*3)
    throw e2;
    }
    }

    }
    -----------------------------------------------------
    static void Main(string[] args)
    {
    try
    {
    MyException me = new MyException();
    Console.WriteLine("try : メソッドの呼出し");

    // Test2 を呼んでみる。
    me.CallException();
    Console.WriteLine("try : メソッドの終了");
    }
    catch (BbException e)
    {
    // BbException
    Console.WriteLine("catch( BbException e) : BbException がスローされた! ");
    Console.WriteLine("catch( BbException e) : {0}", e.Message);
    Exception inner = e.InnerException;
    if (inner != null)
    {
    Console.WriteLine("catch( BbException e) : InnerException : {0}", inner.Message);
    }
    }
    catch (Exception e)
    {
    // Exception は全ての例外をキャッチします!
    Console.WriteLine("catch( Exception e) : エラーがスローされた.");
    Console.WriteLine("catch( Exception e) : {0}", e.Message);
    }
    finally
    {
    Console.WriteLine("finally : try catch の全ての処理後に呼ばれます。");
    Console.ReadLine();
    }

    }
親記事 /過去ログ109より / 関連記事表示
削除チェック/

■64623  Re[1]: 例外処理の動きやInnerExceptionについて
□投稿者/ shu -(2012/12/12(Wed) 10:35:00)
    No64621 (悩み多きランナー さん) に返信

    例外の話よりまず派生について理解されていますでしょうか?

    ExceptionのコンストラクタについてMSDNより
    http://msdn.microsoft.com/ja-jp/library/804f22sf(v=vs.80).aspx

    この辺を理解されれば今回の質問は解決すると思います。
記事No.64621 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64624  Re[2]: 例外処理の動きやInnerExceptionについて
□投稿者/ howling -(2012/12/12(Wed) 10:54:24)
    No64621 (悩み多きランナー さん) に返信

    例外については、私も深く考えたことが無かったのですが…、

    新規に作ったクラスを、例外を処理するクラスにするには、どうすればいいのか?
    ということを考えると、
    例外を処理する基底クラス(これがExceptionクラスなんでしょうね)を継承することで、
    「これは例外を処理するクラスですよ」ということを指し示しているんだと思います。

    だからこそ、よくある例外処理の形として、

    try
    {
    //例外の出る可能性のあるコード
    }
    catch(MyException MyExcep) //指定した何かの例外(ここではMyException)が起きた時の処理
    {
    //例外処理
    }
    catch(Exception ex) //その他の例外
    {
    //種類を問わず、例外は何でも引っかかる様子
    }

    こんなのがあるのかなと思いました。
    なるほど、それならcatch(Exception)としておけば、必ず例外は引っかかるわけだ…。
    だって基底クラスなんですもんね…なるほど納得。

    しかし、Exception自体はinterfaceクラスなのかと思っていたのですが、そうではないんですね。
    catchする時にコンストラクタが呼ばれるのかな…?
    今度試してみようかな。
記事No.64621 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64629  Re[3]: 例外処理の動きやInnerExceptionについて
□投稿者/ 774RR -(2012/12/12(Wed) 12:06:22)
    > catchする時にコンストラクタが呼ばれるのかな…?
    値型と参照型の違い、って奴だよね。

    throw するときに new するのはしかたない
    catch するときに(コピー)コンストラクトされると *それが* 例外原因になりえる=ダメ!
    catch するときにはコピー操作が発生しないよう参照で受け取るべし

    C# の場合、値型は禁止で参照型は許可、っつこと。

記事No.64621 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64630  Re[4]: 例外処理の動きやInnerExceptionについて
□投稿者/ howling -(2012/12/12(Wed) 12:22:22)
    No64629 (774RR さん) に返信
    あー!あーあーあー!そういうことか!

    そういえば、throw new MyExceptionみたいに書きますね…。
    そこでnewしているのか…。
    おっしゃる通りクラスは参照型ですから、
    catchするだけならnewする必要性って無いんじゃないか?とか思っていたので、
    納得できました…。

    インスタンスの作成自体が例外原因になる…とかまでは考えたこと無かったです。
    確かにそう考えると、できるだけ何もしないで渡すのが正しいですね。
    おかげさまでスッキリしました。
    灯台もと暗しですね…(苦笑
    普段例外をcatchするばかりで、throwしていないからこうなるんだなぁ…。
記事No.64621 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64631  Re[5]: 例外処理の動きやInnerExceptionについて
□投稿者/ shu -(2012/12/12(Wed) 12:53:21)
    No64630 (howling さん) に返信

    > catchするだけならnewする必要性って無いんじゃないか?とか思っていたので、
    > 納得できました…。
    new Exceptionで例外情報を作成して
    throwで例外を実際に発生させるわけです。
    発生していない例外をcatchすることは出来ないしcatchする時点で例外は発生している
    のでcatchでインスタンスが出来るのは変なのです。
記事No.64621 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64632  Re[6]: 例外処理の動きやInnerExceptionについて
□投稿者/ howling -(2012/12/12(Wed) 13:00:52)
    No64631 (shu さん) に返信
    > new Exceptionで例外情報を作成して
    > throwで例外を実際に発生させるわけです。
    > 発生していない例外をcatchすることは出来ないしcatchする時点で例外は発生している
    > のでcatchでインスタンスが出来るのは変なのです。

    ですよね…。
    なんでinterfaceクラスにしないんだろう?とだけ思っていましたので。
    ん…?でも、必ずExceptionから継承したクラスしかthrowできない、としてやれば、
    Exceptionクラス自体はinterfaceつけてもいいのでは…?
    まぁ、付けなくてもいいっちゃいいんですが…基本は継承されることを前提としているような気がします。>Exeptionクラス
    なんででしょう?
記事No.64621 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64633  Re[7]: 例外処理の動きやInnerExceptionについて
□投稿者/ shu -(2012/12/12(Wed) 13:13:32)
    No64632 (howling さん) に返信
    > ですよね…。
    > なんでinterfaceクラスにしないんだろう?とだけ思っていましたので。
    > ん…?でも、必ずExceptionから継承したクラスしかthrowできない、としてやれば、
    throw出来ないです。

    > Exceptionクラス自体はinterfaceつけてもいいのでは…?
    > まぁ、付けなくてもいいっちゃいいんですが…基本は継承されることを前提としているような気がします。>Exeptionクラス
    > なんででしょう?
    継承とインターフェースの違いは分かりますか?

    Exception にはこれだけ実装されたメンバーがあります。
    http://msdn.microsoft.com/ja-jp/library/system.exception_members(v=vs.80).aspx

    インターフェースにするとこれらの実装をしないといけなくなってしまいますよ。
記事No.64621 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64634  Re[8]: 例外処理の動きやInnerExceptionについて
□投稿者/ howling -(2012/12/12(Wed) 14:06:54)
    No64633 (shu さん) に返信
    > 継承とインターフェースの違いは分かりますか?
    >
    > Exception にはこれだけ実装されたメンバーがあります。
    > http://msdn.microsoft.com/ja-jp/library/system.exception_members(v=vs.80).aspx
    >
    > インターフェースにするとこれらの実装をしないといけなくなってしまいますよ。

    なるほど、そういえばそうですね。
    だからですか…。
    さすがにこれだけの実装となると大変ですもんね。
    だからほぼ実装しておいて、一部だけoverrideする感じにするんですね…。
    いやはや、長々とすみません。自分が設計する場合の参考になりました。
    ありがとうございました。
記事No.64621 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64636  リストビューに表示されているアイテムの数について
□投稿者/ dig -(2012/12/12(Wed) 15:55:21)

    分類:[C#] 

    (VS .NET3.5 C#)

    こんにちは。
    お世話になります。

    現在私はリストビューをLargeIcon, VirtualModeをOn, OwnerDrawをOnで使用しています。
    タッチパネル対応ソフトのため、指で押すには小さいスクロールバーを非表示にし、ボタンによるスクロールを行おうと思っております。

    そこで画面のリストビュー内に表示されているアイテム数を知りたいのですが、何かよい方法ありますでしょうか?
    (全体のアイテム数ということではありません。)

    やはり自分で計算して求めるという形になるのでしょうか?

    よろしくお願いします。
親記事 /過去ログ109より / 関連記事表示
削除チェック/

■64637  Re[1]: リストビューに表示されているアイテムの数について
□投稿者/ バナナ -(2012/12/12(Wed) 16:35:48)
    例えばリストビューの外枠からはみ出ているアイテムは、リストビュー内アイテムとしてカウントしますか?
    あと、スクロール原点(X=0,Y=0)の時のリストビュー内アイテムの数が必要ですか?
    それとも、任意のスクロール位置でのリストビュー内アイテムの数が必要ですか?
    (後者の場合、スクロール位置によって数は変わってきます)
記事No.64636 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64639  Re[1]: リストビューに表示されているアイテムの数について
□投稿者/ howling -(2012/12/12(Wed) 16:50:45)
    No64636 (dig さん) に返信

    すみません、試せていませんが、OwnerDrawを使用しない場合は以下のやり方で行の高さが取れるようです。
    (ImageListなんて使うんかい!と思うんですが…)
    あとは、全体の高さをそれで割ってやって、余りが出たら1追加してintでくくってやればいいような。

    http://social.msdn.microsoft.com/Forums/ja/csharpgeneralja/thread/0067f039-7d9d-4743-be5b-dbe73614791f

    で、OwnerDrawの場合って、おそらく自分で1つ1つ書くわけですよね?
    てことは、その引数の値にEventArgsがあると思うんですが、
    それにBoundsって無いですかね?
    それが書く領域のサイズだと思うので、それがこの高さに当たると思うのですが…。

    ひとまず、行の高さを調べてみてはいかがでしょう?
記事No.64636 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64622  Re[2]: oracle sql 初心者
□投稿者/ NattoRC -(2012/12/12(Wed) 07:58:32)
    No64600 (あるま さん) に返信
    >あるまさん

    ありがとうございます。

    甘えていたかもしれません。。。

    たとえばjavaなら、「やさしいjava」→「プログラミングレッスン」→「WEBの本」→自作アプリ+リファレンス
    など段階を踏めると思ったのでが、SQLの本は意外と種類がない(と思っているだけかもしれません)
    感じていました。

    ありがとうございます。
記事No.64579 のレス / END /過去ログ109より / 関連記事表示
削除チェック/

■69856  Re[4]: XMLの取得について
□投稿者/ kazu -(2014/02/03(Mon) 00:34:44)
    list = xmldoc.SelectNodes("/rss/channel/item/dc:identifier/[xsi:type='dcndl:ISBN']", nsmgr)

    としましたら、式はノードセットに対して評価する必要があります。

    とエラーが出ました。どなたか、解決方法をご教授ください。宜しくお願いします。
記事No.69852 のレス /過去ログ119より / 関連記事表示
削除チェック/

■79482  Re[1]: actionPerformed(???)の引数の取り方を教示
□投稿者/ 魔界の仮面弁士 -(2016/04/07(Thu) 09:44:06)
    No79477 (ごっちん さん) に返信
    > <public void actionPerformed( ActionEvent e ){}>
    > を以下のように、<btn.addActionListener( )>以外から、
    > 呼び出したいのですが、引数の取り方がわかりません。

    コードを見る限りでは、
     p.setBackground( Color.yellow ) ;
    と呼べば同じ結果になりそうな気がしますが、それでは駄目なのでしょうか。


    上記以外にも「やりたい処理」があるのなら、それらを
    単独のメソッドとして用意しておくのが良いと思います。

    そしてそれを actionPerformed 内から呼ぶような作りにしておけば、
    actionPerformed 以外からでも、そのメソッドを呼ぶことはできるかと。


    もし、actionPerformed の内部実装が不確定な状況を想定しているのだとしたら、
    JButton には .doClick() メソッドがあるようなので、これで呼べるかも知れません。

    ※.NET の .PerformClick() や、jQuery の .trigger('click') のようなものと想像。

    http://stackoverflow.com/questions/1355254/jbutton-doclick-clicks-the-buttons-but-does-not-perform-the-function



    > 色々な変数を入れたり、キャストもしてやりましたが、
    > エラーばかりです。

    public ActionEvent(Object source, int id, String command);
    のコンストラクタで生成したインスタンスを渡せば呼べそうですが、
    行儀の良い方法では無さそうですね。


    > 今晩は、JAVA初心者です、宜しくお願いします。
    > どなたか詳しい方宜しくご教示お願い致します。

    詳しくないどころか、Java アプリを書きあげた経験すら無いので、
    外していたら済みません。
記事No.79477 のレス /過去ログ135より / 関連記事表示
削除チェック/

■98166  Re[1]: C# .ToString で例外発生するケースについて
□投稿者/ 魔界の仮面弁士 -(2021/10/04(Mon) 11:12:32)
    No98165 (take さん) に返信
    > ToString()を使ってstring型に変換しています。
    > リリース環境でソフトウェアが落ちたという現象がありました。
    DataTable に格納したデータが
    「DBNull」や「""」であれば ToString できますが、
    「null」の場合は ToString すると
    NullReferenceException の例外になるでしょうね。


    > dtDataTable.Rows[j]["No"].ToString(),
    削除処理などによって dtDataTable.Rows[j].RowState の状態が
    DataRowState.Deleted だった場合、DataRowVersion を指定せずに
    インデクサで ["No"] にアクセスすれば、
    DeletedRowInaccessibleException の例外になるでしょうね。


    > catch (Exception ex)
    例外を捉える範囲が広すぎるように見えます。
    どの段階で発生した問題なのかを特定しにくくなりませんか?

    この使い方だと、Connection が失敗したのか、SQL 問い合わせが失敗したのか、
    DataTable のスキーマに合致しなかった故なのか、追跡しにくそうです。
    (掲示板投稿のために簡略化しているだけかもしれませんが…)
記事No.98165 のレス /過去ログ170より / 関連記事表示
削除チェック/

<前の20件

<< 0 | 1 >>

パスワード/

- Child Tree -