【最大10000ポイント】当たる!!質問投稿キャンペーン!

c#の参考書って2,3年位前のやつなら問題なく勉強でいますかね?新しい参考書は借りられていて。

A 回答 (2件)

全く問題ない。


この2~3年で追加されたような内容なんて google で調べればサクッと出てくる。
    • good
    • 0

出来ます。


出来ないこともありますが、基礎を学ぶなら問題ありません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QC言語 このプログラムの間違えを修正してください。 よろしくお願いします。

C言語
このプログラムの間違えを修正してください。
よろしくお願いします。

Aベストアンサー

これだと、forループはxがどうであろうとiが1000になるまで回りますね。
画面を見る限りではVisual Studioっぽいけど、デバッガで動き追いかけないんですか?
デバッグはプログラミングに欠かせない要素ですよね。

Qなぜ、画像のプログラムが同じ値にならないのかわかりません。 値を入れてみると違う答えが出ます。 どう

なぜ、画像のプログラムが同じ値にならないのかわかりません。
値を入れてみると違う答えが出ます。
どうかわかりやすく教えて頂けないでしょうか?
よろしくお願い致します。

Aベストアンサー

プログラムの登場人物はa[i][N], a[i][i], d だけなので、これを
b、c、dに書き直せば、前の2行は

d = b/c
b = d- c * b / c

後ろの2行は

b = b/c
b = b - c * b / c

bが変わって行くから通しで流したらbの値が合うわけないし、
別々に流しても、式が違うので合うわけない。
b=4、c=2 とか入れて追ってみればすぐわかる。

QC#のout修飾子経由のOutOfMemory発生ポイント。

C#でout修飾子で変数を別関数に投げ、呼んだ関数でファイル読み込みし、読み込みデータを関数内でオブジェクトを作らずにout修飾子変数に代入して処理終了する場合、呼び出し元側でもOutOfMemoryは出るでしょうか?
出るとすれば呼び出し先なら、呼び出し元にcatchのOutOfMemoryは置かなくても?と思っているところです。
いつなったかによる、などありましたら、詳細を頂けると助かります。
例)
class class1{
public void main(){
string data;
read(out data);
}
public void read(out string data){
data = File.WriteAllText("input.txt");
}
}

Aベストアンサー

どこでキャッチするかだけであって、スタックトレース見れば発生元まで追えると思います。

ログ情報で『○○関数開始』と出力後、read()内で当該例外になった時、
例外をmain()内でキャッチし、エラーメッセージおよびスタックトレースをログ出力すればいいのでは。
それは別に誤った情報にはなりませんよね。

個別にやるべきことがない場合、階層が深いメソッド内で例外をキャッチすると、
その都度必要な実装を書かなければならないことになり、煩雑になるかと思います。

何が何でも様々な例外においてその場ですべてキャッチし、個別に例外処理をするんだ!
という思想ならそれまでですが。

先に最も正解かと思う実装を記しますと、そもそも下層ではキャッチしない、となります。
class class1{
public void main(){
try {
string data;
read(out data);
} catch(OutOfMemoryException e) {
// OutOfMemoryException共通の処理
// Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
} catch(Exception e) {
// 共通の例外処理
// Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
}
}
public void read(out string data){
data = File.WriteAllText("input.txt");
}
}

OutOfMemoryException自体、いつどこで発生するか分からないという想定外の例外かと思います。
それをわざわざありとあらゆるところでキャッチするというのは明らかに非効率でしょう。
よって、ほとんどの場合でこれが正解かと思います。

例えばファイルがオープンできなかったとか、そういう業務的な例外は、その都度キャッチして、更に上位に例外を返す方法が正解かと思います。
(下記コードは例にあるコードに付け加えただけなのでテキトーです)

class class1{
public void main(){
try {
string data;
read(out data);
} catch(OutOfMemoryException e) {
// OutOfMemoryException共通の処理
// Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
} catch(Exception e) {
// 共通の例外処理
// Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
}
}
public void read(out string data){
try {
data = File.WriteAllText("input.txt");
} catch(FileNotFoundException e) {
// ファイルが開けなかった際の個別処理
throw;
}
}
}

===================================
以下、パターンごとの考察となります。


1.
OutOfMemoryExceptionのキャッチをどっちにも入れるという方がどうかと思います。
class class1{
public void main(){
try {
string data;
read(out data);
} catch(OutOfMemoryException e) {
// なんか処理
}
}
public void read(out string data){
try {
data = File.WriteAllText("input.txt");
} catch(OutOfMemoryException e) {
// ログ出力処理
}
}
}

例えばこのような実装があった時、read()で例外が発生したとしましょう。
例外が発生したことをmain()は理解しませんので、そのまま処理を継続してしまいますよね。
絶対そこでめんどくさいことをしなければならなくなります。
エラー情報も戻り値を持つだとか、実際は不必要な実装など。
このような実装をすると、main()では、あくまでもmain()内でOutOfMemoryExceptionが発生した時しか例外をキャッチしなくなります。

2.
ではread()をこうしてみましょうか。
public void read(out string data){
try {
data = File.WriteAllText("input.txt");
} catch(OutOfMemoryException e) {
// なんか固有のログ出力
throw e;
}
}
}
こうすると今度は、read()内で発生した例外を、新たな例外情報として呼び元に返すことになります。
よって、スタックトレースとしては、例外が発生した直前のトレース情報しか得られなくなります。
これは、メソッドの階層が深くなればなるほど、どこで発生したのが分からなくなります。

3.
個別の処理が必要で、どっちにも入れる場合、最初に述べた通り、以下のようにして、スタック情報をすべて有している例外を最上位でキャッチすべきかと思います。
その場合、最上位は、OutOfMemoryExceptionだからどうのとかってあまりないかと思います。
(どうしても他の例外と処理を分ける必要があるならしてもいいですが)
class class1{
public void main(){
try {
string data;
read(out data);
} catch(Exception e) {
// 共通の例外処理
}
}
public void read(out string data){
try {
data = File.WriteAllText("input.txt");
} catch(OutOfMemoryException e) {
// なんか固有のログ出力
throw;
}
}
}

でもこの場合、OutMemoryException自体、いつ発生するかもわからないのですから、ありとあらゆる場所でOutOfMemoryExceptionをキャッチしてログ出力しなければならないというとても煩雑なことになるかと思います。

どこでキャッチするかだけであって、スタックトレース見れば発生元まで追えると思います。

ログ情報で『○○関数開始』と出力後、read()内で当該例外になった時、
例外をmain()内でキャッチし、エラーメッセージおよびスタックトレースをログ出力すればいいのでは。
それは別に誤った情報にはなりませんよね。

個別にやるべきことがない場合、階層が深いメソッド内で例外をキャッチすると、
その都度必要な実装を書かなければならないことになり、煩雑になるかと思います。

何が何でも様々な例外においてその場で...続きを読む


人気Q&Aランキング