たにーの楽しい闘争

日々の気になる事を書いていきます

【C#】DictionaryからKeyでValue(配列)の最初と最後を取得する方法

概要

プログラム

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {

            Dictionary<string, int[]> test = new Dictionary<string, int[]>();
            int[] par = { 178, 65, 15 };
            test.Add("tanii", par);
            int first = test["tanii"].First();
            int last = test["tanii"].Last();
            Console.WriteLine(first);
            Console.WriteLine(last);

        }
    }
}

実行結果

178
15

参考

docs.microsoft.com

www.sejuku.net

【C#】AzureApplicationGatewayでHTTPリクエストに対して、502 Bad Gatewayが返ってきたときの対処方法

概要

swaggerからAzure API Appsを実行したら、下記のエラーが帰ってきた。

502 - Web server received an invalid response while acting as a gateway or proxy server.

502 Bad Gatewayが返る原因はいくつかあるみたいだが、今回は原因が接続タイムアウトだった時の対処方法

結論

処理が重いロジックを非同期化する。

たとえばこんなロジックあったとしたら、

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("処理を開始します");

            TaskTestLogic test = new TaskTestLogic();
            test.TestMeshod();

            Console.WriteLine("処理を終了します");
        }
    }

Task.Runを追加し、処理の終了を待たないようにする。

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("処理を開始します");

            TaskTestLogic test = new TaskTestLogic();
            _ = Task.Run(async () =>
            {
                await test.TestMeshod();
            });

            Console.WriteLine("処理を終了します");
        }
    }

【C#】SQLコマンドがタイムアウトした時の対処方法

エラーメッセージ

the timeout period elapsed prior to completion of the operation or the server is not responding

原因

CommandTimeoutの設定をしていないとデフォルトが30秒のため、それを超えるとエラーとなる。
今回はクエリも実行完了まで30秒以上かかるような重いもので、CommandTimeoutも設定していなかったので、このようなエラーが出た。

対応方法

command.CommandTimeout = 100;//秒数を指定(この場合は100秒)

参考

docs.microsoft.com

【C#】 文字列の前に@をつけると?

結論

文字列の前に@をつけるとエスケープする必要がなくなる

詳細

using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {

            string str1 = "C:\\Users\\tanii\\Documents";
            string str2 = @"C:\Users\tanii\Documents";

            Console.WriteLine(str1);
            Console.WriteLine(str2);

        }
    }
}

実行結果

C:\Users\tanii\Documents
C:\Users\tanii\Documents

【C#】文字列から数値だけを抽出する方法

概要

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {

            string str = "abcd1234efgh";
            
            //文字列から数値だけを抽出
            string after1 = Regex.Replace(str, "[^0-9]", "");
            Console.WriteLine(after1);

            //文字列から数値以外だけを抽出
            string after2 = Regex.Replace(str, "[0-9]", "");
            Console.WriteLine(after2);

        }
    }
}

実行結果

1234
abcdefgh

詳細

Replace(検索する文字列, 置換したい文字列, 置換後の文字列);
上記の例では置換したい文字列に正規表現パターンを使っている。

正規表現について

userweb.mnet.ne.jp

参考

docs.microsoft.com

【VSCode】常にMarkdownで書けるようにする方法(windows)

概要

左下の歯車マークをクリック
設定➡ユーザ Files:にDefault Languageがあり、markdownと記載すればOK

f:id:tanii0207:20200516154036p:plain

結果

今まではctrl + N でtxtファイルが生成されていたが、
mdファイルが生成されるようになる。

これでいちいち保存するときに拡張子を変更する必要がなくなる。