| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「C Sharp」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の26版が非表示)
1行目: 1行目:
==C#==
+
| [[Visual Studio]] | [[VC++]] | [[Visual Studio Code]] |
| [[Visual Studio]] | [[VC++]]
 
===言語まとめ C#===
 
 
{{amazon|4873116503}}
 
{{amazon|4873116503}}
*言語まとめ C#
+
==[[C#]]==
*プログラミングC# 第7版(1)
+
===[[言語まとめ C#]]===
*プログラミングC# 第7版(2)
+
*[[言語まとめ C Sharp |言語まとめ C#]]
 +
*[[プログラミングC Sharp 第7版(1) | プログラミングC# 第7版(1)]]
 +
*[[プログラミングC Sharp 第7版(2) | プログラミングC# 第7版(2)]]
  
 
====概要====
 
====概要====
 
*[http://download.microsoft.com/download/B/6/C/B6C2DA74-08F9-4B18-BB10-CF6DB1A5CFE2/csharp_30_specification.doc 言語仕様 3.0]
 
*[http://download.microsoft.com/download/B/6/C/B6C2DA74-08F9-4B18-BB10-CF6DB1A5CFE2/csharp_30_specification.doc 言語仕様 3.0]
*言語まとめ C#
+
*[[言語まとめ C Sharp | 言語まとめ C#]]
*C# サンプルコード
+
*[[C Sharp サンプルコード | C# サンプルコード]]
*プログラミングC# 第7版
+
*[[プログラミングC Sharp 第7版 | プログラミングC# 第7版]]
 
====Win32 API DLL の利用====
 
====Win32 API DLL の利用====
*C# Win32 API および DLL の利用
+
*[[C Sharp Win32 API および DLL の利用 | C# Win32 API および DLL の利用]]
===Windows Forms===
+
*[https://www.typea.info/blog/index.php/2022/07/27/net6_user32_dll_setwindowshookex_error_126/ .NET6 の Windows Formsから user32.dllの SetWindowsHookEx を呼び出すが ERROR_MOD_NOT_FOUND(126) エラーになる対処]
====C# Windows Forms Tips====
+
 
*C# Windows Forms Tips
+
===[[Windows]] Forms===
====C# 設定情報を保存する====
+
====[[C Sharp Windows Forms Tips | C# Windows Forms Tips]]====
*C# 設定情報を保存する
+
*[[C Sharp Windows Forms Tips | C# Windows Forms Tips]]
 +
====[[C# 設定情報を保存する]]====
 +
*[[C Sharp 設定情報を保存する | C# 設定情報を保存する]]
 
===データベース===
 
===データベース===
====SQL Server Compact====
+
====[[SQL Server Compact]]====
*SQL Server Compact デスクトップ用アプリケーションの構築
+
*[[SQL Server Compact デスクトップ用アプリケーションの構築]]
 
===制御===
 
===制御===
 
====書式====
 
====書式====
*[C# 書式] [書式]
+
*[[C Sharp 書式|書式]]
 
====Sleep====
 
====Sleep====
*[C# Sleep] [Sleep]
+
*[[C Sharp Sleep|Sleep]]
 
===画面・コントロール===
 
===画面・コントロール===
====[C# グラフ] [グラフ]====
+
====[[C# グラフ|グラフ]]====
*[C# グラフ] [グラフ]
+
*[[C Sharp グラフ|グラフ]]
====[C# タスクトレイ] [タスクトレイ]====
+
====[[C# タスクトレイ|タスクトレイ]]====
*[C# タスクトレイ] [タスクトレイ]
+
*[[C Sharp タスクトレイ|タスクトレイ]]
*[C# バックグラウンドで動く] [バックグラウンドで動く]
+
*[[C Sharp バックグラウンドで動く|バックグラウンドで動く]]
 
===リソース===
 
===リソース===
 
====文字列====
 
====文字列====
*[C# 文字列リソース] [文字列]
+
*[[C Sharp 文字列リソース|文字列]]
  
 
===デバッグ===
 
===デバッグ===
*[C# デバッグを行う] [デバッグを行う]
+
*[[C Sharp デバッグを行う|デバッグを行う]]
===Visual Studio===
+
===[[Visual Studio]]===
====Visual Studio 2010 Express C#====
+
====[[Visual Studio 2010 Express C#]]====
*Visual Studio 2010 Express C#
+
*[[Visual Studio 2010 Express C#]]
 
====コーディング規約====
 
====コーディング規約====
 
*[http://msdn.microsoft.com/ja-jp/library/ff926074.aspx C# のコーディング規則]
 
*[http://msdn.microsoft.com/ja-jp/library/ff926074.aspx C# のコーディング規則]
 
*[http://msdn.microsoft.com/ja-jp/library/ms229042.aspx クラス ライブラリ開発のデザイン ガイドライン]
 
*[http://msdn.microsoft.com/ja-jp/library/ms229042.aspx クラス ライブラリ開発のデザイン ガイドライン]
*Effective C# 4.0
+
*[[Effective C# 4.0]]
===Tips===
+
===[[Visual Studio Ankhsvn (Subversion Plugin)|Subversion プラグイン]]===
*[Visual Studio Ankhsvn (Subversion Plugin)] [Subversion プラグイン]
+
*[[Visual Studio Ankhsvn (Subversion Plugin)|Subversion プラグイン]]
*[C# 文字コード変換] [文字コード変換]
+
 
 +
==[[Tips]]==
 +
===日付のパース===
 +
*https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tryparseexact?view=net-6.0
 +
<pre>
 +
public static readonly string DATETIME_FORMAT_ISO8601 = "yyyy-MM-ddTHH:mm:ss.fffZ";
 +
 
 +
DateTime.ParseExact(
 +
  param.value,
 +
  DateTimeUtil.DATETIME_FORMAT_ISO8601,
 +
  System.Globalization.CultureInfo.InvariantCulture));
 +
</pre>
 +
 
 +
 
 +
===属性の指定と読み込み===
 +
[https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/attributes/accessing-attributes-by-using-reflection リフレクションを使用した属性へのアクセス]
 +
 
 +
* 属性定義
 +
<pre>
 +
[System.AttributeUsage(System.AttributeTargets.Property)]
 +
public class PrimaryKeyAttribute : System.Attribute
 +
{
 +
}
 +
</pre>
 +
 
 +
*読み出し(Hogeクラスのプロパティに属性をつけているとする)
 +
<pre>
 +
var type = typeof(Hoge);
 +
var properties = type.GetProperties();
 +
foreach(var property in properties)
 +
{
 +
    foreach(var attr in property.GetCustomAttributes(true))
 +
    {
 +
        Console.WriteLine($"[{attr}]");
 +
    }
 +
    Console.WriteLine($"{property.Name}");
 +
}
 +
</pre>
 +
 
 +
===Docコメント===
 +
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/xmldoc/recommended-tags
 +
*複数の要素に使用される 一般的なタグ - これらのタグは、API 用の最小セットです
 +
**summary: この要素の値は、Visual Studio の IntelliSense に表示されます。
 +
**remarks: **
 +
*メンバーに使用されるタグ - これらのタグは、メソッドおよびプロパティを文書化する場合に使用されます。
 +
**returns: この要素の値は、Visual Studio の IntelliSense に表示されます。
 +
**param: *: この要素の値は、Visual Studio の IntelliSense に表示されます。
 +
**paramref:
 +
**exception: *
 +
**value:: この要素の値は、Visual Studio の IntelliSense に表示されます。
 +
*ドキュメント出力の書式設定 - これらのタグを使用して、ドキュメントを生成するツールに書式設定を指示します。
 +
**para:
 +
**list:
 +
**c:
 +
**code:
 +
**example: **
 +
*ドキュメント テキストの再使用 - これらのタグを使用すると、ツールで XML コメントを再使用しやすくなります。
 +
**inheritdoc: **
 +
**include: *
 +
*リンクと参照の生成 - これらのタグを使用して、他のドキュメントへのリンクを生成します。
 +
**see: *
 +
**seealso: *
 +
**cref:
 +
**href:
 +
*ジェネリック型およびメソッド用のタグ - これらのタグは、ジェネリック型およびメソッドでのみ使用されます。
 +
**<typeparam> *: この要素の値は、Visual Studio の IntelliSense に表示されます。
 +
**<typeparamref>
 +
 
 +
===UIスレッド===
 +
[[C Sharp 非同期処理からUIスレッドにアクセスし画面を更新する]]
 +
===スクレイピング===
 +
[http://anglesharp.github.io/ AngleSharp]
 +
<pre>
 +
using AngleSharp.Html.Parser;
 +
using System;
 +
using System.Collections.Generic;
 +
using System.Diagnostics;
 +
using System.IO;
 +
using System.Linq;
 +
using System.Net.Http;
 +
using System.Text;
 +
 
 +
namespace Hoge
 +
{
 +
    public class Crawler
 +
    {
 +
        private static HttpClient _client = new HttpClient();
 +
        public async void Fetch(string url)
 +
        {
 +
            using(var stream = await _client.GetStreamAsync(url))
 +
            {
 +
                var parser = new HtmlParser();
 +
                var doc = parser.ParseDocument(stream);
 +
 
 +
                var ankers = doc.All.Where(m => m.LocalName == "a");
 +
                foreach(var anker in ankers)
 +
                {
 +
                    Debug.WriteLine(anker.TextContent);
 +
                }
 +
 
 +
            }
 +
 
 +
        }
 +
 
 +
    }
 +
}
 +
</pre>
 +
 
 +
===HttpClient Query String===
 +
  var param = (new FormUrlEncodedContent(dict)).ReadAsStringAsync().GetAwaiter().GetResult();
 +
 
 +
===文字列配列を結合してCSVを作成===
 +
<pre>
 +
string[] row = 文字列配列
 +
return string.Join(GetDelimiters(), row.Select(f => $"\"{f}\"").ToArray());
 +
</pre>
  
====string を stream に変換====
+
*¥{0¥} を生成する場合
 +
<pre>
 +
var i = 0;
 +
var fmt = @$"¥{{{i}¥}}";
 +
</pre>
 +
 
 +
===[[C Sharp 文字コード変換|文字コード変換]]===
 +
*[[C Sharp 文字コード変換|文字コード変換]]
 +
===[[正規表現]]による置換===
 +
var output = System.Text.RegularExpressions.Regex.Replace(input, @"^[ ]", "");
 +
===string を stream に変換===
 
   return new MemoryStream(Encoding.UTF8.GetBytes(value ?? ""));
 
   return new MemoryStream(Encoding.UTF8.GetBytes(value ?? ""));
 
+
===ディレクトリを再帰的に表示===
====ディレクトリを再帰的に表示====
 
 
  class Program
 
  class Program
 
  {
 
  {
78行目: 204行目:
 
  }
 
  }
  
====SHIFT-JIS 文字列から、SO SI を除去====
+
===SHIFT-JIS 文字列から、SO SI を除去===
 
  var encShiftJis = Encoding.GetEncoding("shift_jis");
 
  var encShiftJis = Encoding.GetEncoding("shift_jis");
 
  int lino = 1;
 
  int lino = 1;
  using (var reader = new StreamReader(path, encShiftJis))
+
  using (var reader = new Stream[[R]]eader(path, encShiftJis))
 
  {
 
  {
 
     string line = null;
 
     string line = null;
     while ((line = reader.ReadLine())!=null)
+
     while ((line = reader.[[R]]eadLine())!=null)
 
     {
 
     {
 
         byte[] bytes = encShiftJis.GetBytes(line);
 
         byte[] bytes = encShiftJis.GetBytes(line);
96行目: 222行目:
 
     }
 
     }
 
  }
 
  }
 +
 +
===リストのシャッフル===
 +
<pre>
 +
list = list.OrderBy(m => Guid.NewGuid()).ToList();
 +
</pre>
 +
 +
===ファイルを読んで書く===
 +
<pre>
 +
var inPath = @"...";
 +
var outPath = @"...";
 +
 +
using (var writer = File.CreateText(outPath))
 +
{
 +
    var lines = File.ReadAllLines(inPath).ToList();
 +
    lines.ForEach(line => {
 +
        writer.WriteLine(line);
 +
    });
 +
}
 +
</pre>
 +
 +
===ディレクトリのファイル処理===
 +
<pre>
 +
Directory.GetFiles(dirPath).ToList().ForEach( path => {
 +
    var name = Path.GetFileName(path);
 +
 +
});
 +
</pre>
 +
 +
[[category:プログラミング言語]]

2023年7月26日 (水) 02:13時点における最新版

| Visual Studio | VC++ | Visual Studio Code |

C#

言語まとめ C#

概要

Win32 API DLL の利用

Windows Forms

C# Windows Forms Tips

C# 設定情報を保存する

データベース

SQL Server Compact

制御

書式

Sleep

画面・コントロール

グラフ

タスクトレイ

リソース

文字列

デバッグ

Visual Studio

Visual Studio 2010 Express C#

コーディング規約

Subversion プラグイン

Tips

日付のパース

public static readonly string DATETIME_FORMAT_ISO8601 = "yyyy-MM-ddTHH:mm:ss.fffZ";

DateTime.ParseExact(
  param.value, 
  DateTimeUtil.DATETIME_FORMAT_ISO8601, 
  System.Globalization.CultureInfo.InvariantCulture));


属性の指定と読み込み

リフレクションを使用した属性へのアクセス

  • 属性定義
[System.AttributeUsage(System.AttributeTargets.Property)]
public class PrimaryKeyAttribute : System.Attribute
{
}
  • 読み出し(Hogeクラスのプロパティに属性をつけているとする)
var type = typeof(Hoge);
var properties = type.GetProperties();
foreach(var property in properties)
{
    foreach(var attr in property.GetCustomAttributes(true))
    {
        Console.WriteLine($"[{attr}]");
    }
    Console.WriteLine($"{property.Name}");
}

Docコメント

https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/xmldoc/recommended-tags

  • 複数の要素に使用される 一般的なタグ - これらのタグは、API 用の最小セットです
    • summary: この要素の値は、Visual Studio の IntelliSense に表示されます。
    • remarks: **
  • メンバーに使用されるタグ - これらのタグは、メソッドおよびプロパティを文書化する場合に使用されます。
    • returns: この要素の値は、Visual Studio の IntelliSense に表示されます。
    • param: *: この要素の値は、Visual Studio の IntelliSense に表示されます。
    • paramref:
    • exception: *
    • value:: この要素の値は、Visual Studio の IntelliSense に表示されます。
  • ドキュメント出力の書式設定 - これらのタグを使用して、ドキュメントを生成するツールに書式設定を指示します。
    • para:
    • list:
    • c:
    • code:
    • example: **
  • ドキュメント テキストの再使用 - これらのタグを使用すると、ツールで XML コメントを再使用しやすくなります。
    • inheritdoc: **
    • include: *
  • リンクと参照の生成 - これらのタグを使用して、他のドキュメントへのリンクを生成します。
    • see: *
    • seealso: *
    • cref:
    • href:
  • ジェネリック型およびメソッド用のタグ - これらのタグは、ジェネリック型およびメソッドでのみ使用されます。
    • <typeparam> *: この要素の値は、Visual Studio の IntelliSense に表示されます。
    • <typeparamref>

UIスレッド

C Sharp 非同期処理からUIスレッドにアクセスし画面を更新する

スクレイピング

AngleSharp

using AngleSharp.Html.Parser;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;

namespace Hoge
{
    public class Crawler
    {
        private static HttpClient _client = new HttpClient();
        public async void Fetch(string url)
        {
            using(var stream = await _client.GetStreamAsync(url))
            {
                var parser = new HtmlParser();
                var doc = parser.ParseDocument(stream);

                var ankers = doc.All.Where(m => m.LocalName == "a");
                foreach(var anker in ankers)
                {
                    Debug.WriteLine(anker.TextContent);
                }

            }

        }

    }
}

HttpClient Query String

 var param = (new FormUrlEncodedContent(dict)).ReadAsStringAsync().GetAwaiter().GetResult();

文字列配列を結合してCSVを作成

string[] row = 文字列配列
return string.Join(GetDelimiters(), row.Select(f => $"\"{f}\"").ToArray());
  • ¥{0¥} を生成する場合
var i = 0;
var fmt = @$"¥{{{i}¥}}";

文字コード変換

正規表現による置換

var output = System.Text.RegularExpressions.Regex.Replace(input, @"^[ ]", "");

string を stream に変換

 return new MemoryStream(Encoding.UTF8.GetBytes(value ?? ""));

ディレクトリを再帰的に表示

class Program
{
    static void Main(string[] args)
    {
        var me = new Program();
        me.Parse(args[0], 0);
    }

    private void Parse(string path, int depth)
    {
        var indent = new string(' ', depth * 2);
        foreach (var entry in Directory.EnumerateFileSystemEntries(path))
        {
            var attr = File.GetAttributes(entry);
            if (attr.HasFlag(FileAttributes.Directory))
            {
                Console.WriteLine($"{indent}{Path.GetDirectoryName(entry)}\\");
                this.Parse(entry, depth + 1);
            }
            Console.WriteLine($"{indent}{Path.GetFileName(entry)}");
        }
    }
}

SHIFT-JIS 文字列から、SO SI を除去

var encShiftJis = Encoding.GetEncoding("shift_jis");
int lino = 1;
using (var reader = new StreamReader(path, encShiftJis))
{
    string line = null;
    while ((line = reader.ReadLine())!=null)
    {
        byte[] bytes = encShiftJis.GetBytes(line);
        for(int i=0;i<bytes.Length; i++)
        {
            // bytes = bytes.Where(b => (b != 0x20 /*space*/ && b != 0x61 /*'a'*/)).ToArray();
            bytes = bytes.Where(b => (b != 0x0E /*SO*/ || b != 0x0F /*SI*/)).ToArray();
        }
        line = encShiftJis.GetString(bytes);
        Console.WriteLine($"{indent}{lino++:D4}:{line}");
    }
}

リストのシャッフル

list = list.OrderBy(m => Guid.NewGuid()).ToList();

ファイルを読んで書く

var inPath = @"...";
var outPath = @"...";

using (var writer = File.CreateText(outPath))
{
    var lines = File.ReadAllLines(inPath).ToList();
    lines.ForEach(line => {
        writer.WriteLine(line);
    });
}

ディレクトリのファイル処理

Directory.GetFiles(dirPath).ToList().ForEach( path => {
    var name = Path.GetFileName(path);

});