- 投稿日:2019-04-17T22:28:01+09:00
【C#・Xamarin.Forms】NetworkInterface.GetIsNetworkAvailable()の落とし穴
よくあるサンプル
「インターネットに接続しているか」の検証方法として、
NetworkInterface.GetIsNetworkAvailable()メソッド
を使った以下のようなソースをよく見かけます。using System.Net.NetworkInformation; if(NetworkInterface.GetIsNetworkAvailable()) Console.WriteLine("接続済"); else Console.WriteLine("未接続");LANケーブルが刺さった状態や、WiFiモジュール等を積んでいる端末でこれを実際に走らせると、有効な接続がなくても利用可能判定となり結果は「接続済」となります。
脳死してコーディングしていたため、半日くらいこれでハマりました。
これでは「インターネットに接続しているか」の確認はできません。以下の記事に、対策方法があります。
え、Xamarinじゃ使えないやんけ
わかります。そんなときは
Xamarin.Essentials
です。
Windows.Networking.Connectivity
と同等の機能を提供しています。https://docs.microsoft.com/ja-jp/xamarin/essentials/connectivity
- 投稿日:2019-04-17T13:02:06+09:00
情報研修_07_Windowsフォームプログラム_20190417(未完成)
- 投稿日:2019-04-17T13:02:06+09:00
情報研修_07_Windowsフォームプログラム_20190417(勉強必要)
0. 前書き:
0.1 昨日復習
0.1.1 出力形式
0.1.2 タイマーの復習
0.2 複数分岐
0.3 列挙型
1. 復習
1.1 出力形式
- カスタム書式指定文字を使った書式の指定
- カスタム書式指定文字には、プレースホルダ、小数点、桁区切り記号などがある。
- プレースホルダには、ゼロプレースホルダと桁プレースホルダがある。
カスタム書式指定文字 ゼロプレースホルダと小数点の組み合わせ 0000.00 eg:1.2->[0001.20] 整数部は達してない場合が0で埋められ、小数部は満たない部分が0で埋められる 桁プレースホルダ ####.## 桁数に満たない部分には何も表示されない
- 整数部でプレースホルダとプレースホルダの間にカンマ(,)があると、整数部は3桁ごとにカンマで区切られる。
- 書式指定文字でない文字はその位置にそのまま表示される。
- 書式指定文字をそのまま表示したいときは(')(シングルクォーテーション)で囲む。
1.2 タイマーの復習
情報研修06_Windowsフォームプログラム入門20190416
2. 複数分岐
- フォールスルー禁止について
- C#はフォールスルーが禁止といって、原則上では、「break」が省略できないようになっている。
defaultCaseusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace defaultCase { class Program { static void Main(string[] args) { Console.Write("サイコロの出目を入力してね!"); int num = int.Parse(Console.ReadLine()); switch(num) { case 1: Console.WriteLine("! 1 !"); break; case 2: Console.WriteLine("! 2 !"); break; case 3: Console.WriteLine("! 3 !"); break; case 4: Console.WriteLine("! 4 !"); break; case 5: Console.WriteLine("! 5 !"); break; case 6: // Console.WriteLine("! 6 !"); // break; default: Console.WriteLine("! Fault !"); break; } Console.ReadKey(); } } }
- 例外:フォールスルーが許される場合
- いくつかのcase節で同じ処理を行い場合は、このように処理や「break」の記述を省略出来て、フォールスルーが許される。
3. 列挙型(enum)
- enum 列挙名:型{列挙子のリスト}
- char型以外の任意の整数型を指定できる。
- 通常はint型で、その場合特に型は指定しない。
- 「猫でもわかるC#プログラミング」の例を出す。
enum01.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace enum01 { class Program { enum Month { Jan = 1, Feb, Mon, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; static void Main(string[] args) { Console.WriteLine("Aprは{0}月。", (int)Month.Apr); Console.WriteLine("Mayは{0}月。", (int)Month.May); Console.ReadLine(); } } }
- 投稿日:2019-04-17T12:49:04+09:00
プログラム初心者のためのC#入門 #7 関数
#7 関数
今回のテーマは関数です.皆さんご存知のアレです.
y = f(x)
です.数学で言う関数は「x
を定めると,y
が一意的に出てくる」というもので,言い換えると「x
という入力があって,y
という出力がある」とも言えます.プログラムで言う関数は入力がない関数も出力がない関数もあります.なので,プログラムの関数は一連の処理をひとまとめにしたものという感じです.何はともあれ実際に関数を見てみましょう.戻り値の型 関数名(引数の型 引数名) { 処理 }これが関数の基本形です.戻り値は出力,引数(ひきすう)は入力です.
y = f(x) = 3x + 2数学の二元一次関数です.これをC#で表すと,
long f(int x) { return 3 * x + 2; }この関数はint型のデータを受け取って,long型のデータを返します.
return
で値を返します.FunctionSample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FunctionSample { class Program { static long f(int x) { return 3 * x + 2; // 3. xに5を代入して演算した結果を返す. } static void Main(string[] args) { long y; // 1. yの定義. y = f(5); // 2. f関数に5を渡す. 4. yに返ってきた17を代入. Console.WriteLine(y); // 5. yを画面に出力. } } }Main関数で使うためには
static
が必要なので付けといてください.
y = f(5)
を見ると数学の関数と何ら変わりないように見えますね.f関数にはint型ならどんなリテラルも変数も渡せます.
数学で言うような関数もある一方で,Main関数やConsole.WriteLine関数のように戻り値を持たないものもあります.
void PlusOneAndDisplay(int num) { Console.WriteLine(++num); }受け取った値をインクリメントして出力する関数です.
PlusOneAndDisplay(7);
と書くと画面に8
が出力されます.
引数を複数取る関数もあります.
int Add(int num1, int num2) { return num1 + num2; }使う場合もカンマ区切りで
Add(3, 6)
のように書くと9
を返してくれます.
ここで,便利な関数を紹介します.
string Console.ReadLine()
: キーボード入力を受け付ける関数.
int int.Parse(string)
: string型のデータをint型のデータに変換する関数.
この2つを使うと,string str = Console.ReadLine(); int num = int.Parse(str); Console.WriteLine(num + 4);のようにしてキーボード入力されたものをint型にして4足したものが出力されるような処理が書けます.慣れてくるともっと簡単に
Console.WriteLine(int.Parse(Console.ReadLine()) + 4);と書くこともできます.まだ他にもMicrosoftが標準で用意してくれている関数があるので,気になる人は調べてみてください.
次回は構造体について説明します.
練習問題
引数が2つのint型,戻り値もint型で,2つの数値の中で大きい値を返すGetLarger関数を作ってください.
解答例
三項演算子というものを使ってみました.もちろんif文で条件分岐してもOKです.FunctionSample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ArraySample { class Program { static int GetLarger(int num1, int num2) { return num1 < num2 ? num2 : num1; } static void Main(string[] args) { Console.WriteLine(GetLarger(5, 7)); } } }