2017-01-12 8 views
-1

このコードを実行すると何らかの理由でアプリケーションがクラッシュし、VSのシャットダウンとタブが消えます。私にとってはすべてが正しいようですが、私はC#とVSでとても新しいです。デバッグなしで起動すると正しく動作します(CTRL + F5)。コード内のすべてが正しいと思われ、コード内に警告がありません。C#デバッグを開始するとコンソールアプリケーションがクラッシュしますが、デバッガなしでは発生しません

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace phoneSpace{ 

    class PhoneNumber{ 

     private string Number; 

     public string number{ 
      get; set; 
     } 

     public PhoneNumber(string number){ 
      Number = number; 
     } 

     public void printNumber(){ 
      Console.WriteLine("{0}", Number); 
     } 

     static void Main(string[] args) 
     { 
      PhoneNumber phoneOne = new PhoneNumber("0703502341"); 
      phoneOne.printNumber(); 
     } 
    } 
} 
+0

は、あなたはそれがクラッシュすることが確実ですか?例外は何ですか? 'Main()'メソッドの一番下に 'Console.ReadLine()'を追加してみてください。 – Cameron

+1

シャットダウンしてもよろしいですか?結果を見るにはあまりにも速く実行するだけかもしれません。 VSはプログラムの終了時にコンソールウィンドウを閉じます。これは正常です。 [この質問](http://stackoverflow.com/questions/1775865/preventing-console-window-from-closing-on-visual-studio-c-c-console-applicatio)を参照してください。 –

+1

コードは問題ではなく、うまくいきます。 – Equalsk

答えて

2

実行後に自動終了しないことは確実ですか?

コードは私にとって正しいようですが、main関数の最後の行の後に次の行を追加してください。デバッグモードでアプリケーションを実行し、アプリケーションモードで実行が完了するたびに、それが自動的に閉じるたび

Console.ReadKey(); 
+0

それは、autoclosing、ありがとう –

+0

素晴らしい..私の答えを受け入れることができれば大歓迎です。ありがとう –

0

、それは(デバッグなしで実行)非デバッグモードでは発生しません。

Mainメソッドの最後の行にConsole.Read();を追加することをお勧めします。ユーザーがキーを押すのを待ってから閉じます。

0

コードは問題ありません。アプリケーションが終了するまで待つことがないため、アプリケーションはただ終了しているようです。 this question(参考として引用)を表示した場合:

デバッグなしで実行すると(Ctrl + F5)、デフォルトではリターンキーを押してウィンドウを閉じるように求められます。デバッガを使用する場合は、最後の行にブレークポイントを設定する必要があります。

したがって、デバッガなしで実行すると、Visual Studioは自動的にアプリケーションが終了するのを防ぎます。あなたは、このようなブレークポイントの設定や入力をユーザに促すなど、さまざまなオプション、持っているデバッガで実行している場合、この問題を回避するには

Console.ReadKey(); //Any key press will close the application 
//Or 
Console.ReadLine(); //On ending a line the application will close: usually with enter 
//etc 

はまた、次のコードが原因警告が生じる可能性があります注意してくださいプロパティは、実際にそのBACを使用していますので、

private string Number; 

public string number 
{ 
    get; set; 
} 

public PhoneNumber(string number) 
{ 
    Number = number; 
} 

は私が命名規則に合致し、またそれを作るために、コードを変更します@PaulFで述べたように、変数に同じ名前を付けられましたキングフィールド:

private string _number; 

public string Number { get { return _number; } set { _number = value; } } 

public PhoneNumber(string number) 
{ 
    _number = number; 
} 

そして、より良いまだプロパティは、何か特別なことをやっていないと私はフィールドを削除したい見て:

public string Number { get; set; } 

public PhoneNumber(string number) 
{ 
    Number = number; 
} 
+0

少量のコードでは、これまでのところプライベート文字列を削除して数字プロパティを大文字にするように見えますが、良い解決策になります。 – PaulF

+0

@PaulFこれを反映して追加情報を追加するように更新されました – TheLethalCoder

関連する問題