「C Sharp」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==C#== [Visual Studio][VC++] ===言語まとめ C#=== {{amazon|4873116503}} *言語まとめ C# *プログラミングC# 第7版(1) *プログラミングC# 第7版…」) |
|||
| (同じ利用者による、間の29版が非表示) | |||
| 1行目: | 1行目: | ||
| − | + | | [[Visual Studio]] | [[VC++]] | [[Visual Studio Code]] | | |
| − | [Visual Studio][VC++] | ||
| − | |||
{{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 | + | *[[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]] |
| − | === | + | ===[[Visual Studio Ankhsvn (Subversion Plugin)|Subversion プラグイン]]=== |
| − | *[Visual Studio Ankhsvn (Subversion Plugin)] [ | + | *[[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 を除去=== | |
var encShiftJis = Encoding.GetEncoding("shift_jis"); | var encShiftJis = Encoding.GetEncoding("shift_jis"); | ||
int lino = 1; | int lino = 1; | ||
| − | using (var reader = new | + | using (var reader = new Stream[[R]]eader(path, encShiftJis)) |
{ | { | ||
string line = null; | string line = null; | ||
| − | while ((line = reader. | + | while ((line = reader.[[R]]eadLine())!=null) |
{ | { | ||
byte[] bytes = encShiftJis.GetBytes(line); | byte[] bytes = encShiftJis.GetBytes(line); | ||
| − | for(int i=0;i | + | for(int i=0;i<bytes.Length; i++) |
{ | { | ||
| − | // bytes = bytes.Where(b = | + | // bytes = bytes.Where(b => (b != 0x20 /*space*/ && b != 0x61 /*'a'*/)).ToArray(); |
| − | bytes = bytes.Where(b = | + | bytes = bytes.Where(b => (b != 0x0E /*SO*/ || b != 0x0F /*SI*/)).ToArray(); |
} | } | ||
line = encShiftJis.GetString(bytes); | line = encShiftJis.GetString(bytes); | ||
| 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 の利用
- C# Win32 API および DLL の利用
- .NET6 の Windows Formsから user32.dllの SetWindowsHookEx を呼び出すが ERROR_MOD_NOT_FOUND(126) エラーになる対処
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スレッドにアクセスし画面を更新する
スクレイピング
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);
});
© 2006 矢木浩人