<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>C# アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<atom:link href="https://nyanblog2222.com/category/programming/c-sharp/feed/" rel="self" type="application/rss+xml" />
	<link>https://nyanblog2222.com/category/programming/c-sharp/</link>
	<description>ちょっとしたことを調べているよ</description>
	<lastBuildDate>Tue, 29 Aug 2023 13:35:14 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://nyanblog2222.com/wp-content/uploads/2021/09/cropped-favicon-32x32.png</url>
	<title>C# アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<link>https://nyanblog2222.com/category/programming/c-sharp/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>【PowerShell】PDFを1ページずつ分ける方法【簡単】</title>
		<link>https://nyanblog2222.com/windows/5271/</link>
					<comments>https://nyanblog2222.com/windows/5271/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Sun, 27 Aug 2023 12:54:31 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Web全般]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[iTextSharp]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[windows10]]></category>
		<category><![CDATA[分割]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=5271</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_4.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_4.png 800w, https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_4-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_4-768x401.png 768w" sizes="(max-width: 800px) 100vw, 800px" />PDFを好きに分割したいなぁ…。と考えることがあり今回はPowerShellとiTextSharpを使用して作ってみました。 ちなみにオンラインツールでAdobeやilovePDFでPDFカットというのがあるようですね！ [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/windows/5271/">【PowerShell】PDFを1ページずつ分ける方法【簡単】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_4.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_4.png 800w, https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_4-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_4-768x401.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" />
<p>PDFを好きに分割したいなぁ…。と考えることがあり<br>今回はPowerShellとiTextSharpを使用して作ってみました。</p>



<p>ちなみにオンラインツールで<a href="https://www.adobe.com/jp/acrobat/online/split-pdf.html" class="broken_link">Adobe</a>や<a href="https://www.ilovepdf.com/ja/split_pdf">ilovePDFでPDFカット</a>というのがあるようですね！</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">コードを紹介する前に</a></li><li><a href="#toc2" tabindex="0">フォルダ構成</a></li><li><a href="#toc3" tabindex="0">iTextSharpの準備</a></li><li><a href="#toc4" tabindex="0">コード</a></li><li><a href="#toc5" tabindex="0">実行</a><ol><li><a href="#toc6" tabindex="0">実行コマンド</a></li><li><a href="#toc7" tabindex="0">フォルダ</a></li></ol></li><li><a href="#toc8" tabindex="0">補足</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">コードを紹介する前に</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>itextsharpはライセンスが複雑になってきたそうで、取り扱いに注意する必要があるみたいです。<br>pdfsharpというのもあるみたいですね！</p>
</div></div>



<p><a href="https://qiita.com/toshi71/items/bc05d6e15edd645c8f46">iTextSharpのライセンスについてはこちらを参考にしました。</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>今回は作ってみただけなのでこのままコードを紹介します！</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc2">フォルダ構成</span></h2>



<p>フォルダ構成はこちらです。</p>



<p><span class="marker-under">注意点：事前にnewフォルダに同じPDFファイルがある場合は上書きされます。</span></p>



<pre class="wp-block-code python"><code>■どこかのフォルダ
┣■new　… 無くても処理中に生成されます
┣・itextsharp.dll
┣・pdf_split.ps1
┗・分割したいPDFファイル</code></pre>



<h2 class="wp-block-heading"><span id="toc3">iTextSharpの準備</span></h2>



<p>こちらのページからバージョンを選択します。<br>ページ下部の<span class="bold-red">「+ Show more」をクリック</span>するとさらにバージョンが出てきます。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a rel="noopener" href="https://www.nuget.org/stats/packages/iTextSharp?groupby=Version" title="
        NuGet Gallery
        | Package Downloads for iTextSharp
    " class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.nuget.org%2Fstats%2Fpackages%2FiTextSharp%3Fgroupby%3DVersion?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">
        NuGet Gallery
        | Package Downloads for iTextSharp
    </div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.nuget.org/stats/packages/iTextSharp?groupby=Version" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.nuget.org</div></div></div></div></a>
</div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="972" height="446" src="https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_3.png" alt="" class="wp-image-5287" srcset="https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_3.png 972w, https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_3-300x138.png 300w, https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_3-768x352.png 768w" sizes="auto, (max-width: 972px) 100vw, 972px" /></figure>



<p><span class="bold-red">「Download package」</span>からインストールしてください。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1013" height="607" src="https://nyanblog2222.com/wp-content/uploads/2023/08/image.png" alt="" class="wp-image-5283" srcset="https://nyanblog2222.com/wp-content/uploads/2023/08/image.png 1013w, https://nyanblog2222.com/wp-content/uploads/2023/08/image-300x180.png 300w, https://nyanblog2222.com/wp-content/uploads/2023/08/image-768x460.png 768w" sizes="auto, (max-width: 1013px) 100vw, 1013px" /></figure>



<p>ファイルが<span class="bold-red">「itextsharp.???.nupkg」</span>でダウンロードされますが、<span class="marker-under">zipファイルなので解凍してください</span>。</p>



<p>出来ない場合はitextsharp.???<span class="bold-red">.nupkg</span>をitextsharp.???<span class="bold-red">.zip</span>に名前を変更すると右クリックでも解凍できると思います。<br>※ ???はバージョンです。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="814" height="254" src="https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_2.png" alt="" class="wp-image-5286" srcset="https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_2.png 814w, https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_2-300x94.png 300w, https://nyanblog2222.com/wp-content/uploads/2023/08/20230827_2-768x240.png 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /></figure>



<p>「itextsharp.???\lib\<span class="bold-red">itextsharp.dll</span>」ファイルを使用するので、<br>powershellのファイルが置いてある場所にコピーしてください。</p>



<pre class="wp-block-code python"><code>■どこかのフォルダ
┣■new　… 無くても処理中に生成されます
┣・<span class="bold-red">itextsharp.dll</span>
┣・pdf_split.ps1
┗・分割したいPDFファイル</code></pre>



<p>■：フォルダ<br>・：ファイル</p>



<h2 class="wp-block-heading"><span id="toc4">コード</span></h2>



<p>以下がpdf_split.ps1のコードになります。<br>解説はコメントに記載しました。</p>



<p>※ <span class="bold-red">$args</span>というのは引数が入った配列で$args[0]は第1引数になります。<br>この後実行する際に出てきます。</p>



<pre class="wp-block-code python"><code># 現在のディレクトリを取得
$currentDir = Get-Location
Set-Location $currentDir

# itextsharp.dllのロード
# 絶対パスを記載してください。
&#91;System.Reflection.Assembly]::LoadFrom("C:\？？？\itextsharp.dll");

# 分割PDFの生成先フォルダパス
if(-! (Test-Path "./new")) {
    New-Item new -ItemType Directory
}
$destFolderPath = Join-Path $currentDir "new"

# inputのPDFパスを設定し、readerを生成
$srcPath = $args&#91;0]
$pdfReader = New-Object iTextSharp.text.pdf.PdfReader($srcPath)

# ファイル名（拡張子なし）
$fileName = &#91;System.IO.Path]::GetFileNameWithoutExtension($srcPath)

# ページ数取得し、ページ単位でfor文を回す
$pages = $pdfReader.NumberOfPages
for($page = 1; $page -le $pages; $page++) {

    # 出力する分割PDFのファイルパスを設定
    $destPath = Join-Path $destFolderPath ($fileName + "_" + $page + ".pdf")

    # ファイル生成に必要なオブジェクトを生成
    $fileStream = New-Object System.IO.FileStream($destPath, &#91;System.IO.FileMode]::Create)
    $document = New-Object iTextSharp.text.Document($pdfReader.GetPageSize($page))
    $pdfWriter = &#91;iTextSharp.text.pdf.PdfWriter]::GetInstance($document, $fileStream)

    # PDFファイルをオープンし、新規ページを作成
    $document.Open()
    $document.NewPage() | Out-Null

    # ページを読み込み、先ほど作成した新規ページに読み込んだページを書き込みます。
    $readPage = $pdfWriter.GetImportedPage($pdfReader, $page)
    $pdfWriter.DirectContent.AddTemplate($readPage, 0, 0)

    # reader以外のオブジェクトをクローズ
    $document.Close()
    $fileStream.Close()
    $pdfWriter.Close()
}
# 全てのページの処理が完了後readerをクローズ
$pdfReader.Close()
</code></pre>



<h2 class="wp-block-heading"><span id="toc5">実行</span></h2>



<p>Windows Powershellを起動します。</p>



<h3 class="wp-block-heading"><span id="toc6">実行コマンド</span></h3>



<p>cdコマンドでカレントディレクトリを変更</p>



<pre class="wp-block-code python"><code>cd ps1ファイルがあるディレクトリ</code></pre>



<p>pdfファイルの絶対パスを引数にpdf_split.ps1を実行</p>



<pre class="wp-block-code python"><code>./pdf_split.ps1 "pdfファイルの絶対パス"</code></pre>



<p>これでnewフォルダに分割pdfができあがります！</p>



<h3 class="wp-block-heading"><span id="toc7">フォルダ</span></h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="853" height="285" src="https://nyanblog2222.com/wp-content/uploads/2023/08/4.png" alt="" class="wp-image-5305" srcset="https://nyanblog2222.com/wp-content/uploads/2023/08/4.png 853w, https://nyanblog2222.com/wp-content/uploads/2023/08/4-300x100.png 300w, https://nyanblog2222.com/wp-content/uploads/2023/08/4-768x257.png 768w" sizes="auto, (max-width: 853px) 100vw, 853px" /><figcaption class="wp-element-caption">実行後</figcaption></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="853" height="257" src="https://nyanblog2222.com/wp-content/uploads/2023/08/3.png" alt="" class="wp-image-5304" srcset="https://nyanblog2222.com/wp-content/uploads/2023/08/3.png 853w, https://nyanblog2222.com/wp-content/uploads/2023/08/3-300x90.png 300w, https://nyanblog2222.com/wp-content/uploads/2023/08/3-768x231.png 768w" sizes="auto, (max-width: 853px) 100vw, 853px" /><figcaption class="wp-element-caption">newフォルダの中身</figcaption></figure>



<p></p>



<h2 class="wp-block-heading"><span id="toc8">補足</span></h2>



<p>.Netがないと動かないかもしれませんので、その場合はインストールをお願いします。</p>
<p>投稿 <a href="https://nyanblog2222.com/windows/5271/">【PowerShell】PDFを1ページずつ分ける方法【簡単】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/windows/5271/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【C#】配列からリスト（List）、リスト（List）から配列へ変換</title>
		<link>https://nyanblog2222.com/programming/c-sharp/3343/</link>
					<comments>https://nyanblog2222.com/programming/c-sharp/3343/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Tue, 11 May 2021 02:06:40 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[リスト]]></category>
		<category><![CDATA[変換]]></category>
		<category><![CDATA[配列]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=3343</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/98.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/98.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/98-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/98-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/98-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />今回はC#で使用する配列とリスト（List）のそれぞれの変換方法についてご紹介します。 目次 配列とリストの違い配列からリスト（List）への変換リスト（List）から配列への変換 配列とリストの違い 配列とリストの主な [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/3343/">【C#】配列からリスト（List）、リスト（List）から配列へ変換</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/98.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/98.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/98-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/98-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/98-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>今回はC#で使用する配列とリスト（List）のそれぞれの変換方法についてご紹介します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">配列とリストの違い</a></li><li><a href="#toc2" tabindex="0">配列からリスト（List）への変換</a></li><li><a href="#toc3" tabindex="0">リスト（List）から配列への変換</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">配列とリストの違い</span></h2>



<p><span class="marker-under-red">配列とリストの主な違いは要素数、データの箱の数が固定か可変かどうか</span>です。</p>



<p><span class="marker-under-red">配列の場合は</span>宣言時に要素数を指定するため、<span class="marker-under-red">要素数が固定である</span>必要があります。<br>また、2次元配列、3次元配列&#8230;のように多次元配列を容易に扱うことができます。</p>



<p>一方で<span class="marker-under-red">リストの場合は</span>要素数の指定がなく、<br>要素の追加、削除を自由にできるため、<span class="marker-under-red">要素数を動的に変更することができます</span>。</p>



<h2 class="wp-block-heading"><span id="toc2">配列からリスト（List）への変換</span></h2>



<p>配列からリストに変換する方法をご紹介します。</p>



<p>配列 string[] からリスト List&lt;string&gt; に変換するには<br><span class="marker-under-red">コンストラクタの引数に配列 string[] を渡す</span>ことで変換することができます。<br>※ ここでは例で型をstringで説明しています。</p>



<p>以下の例では1行目で配列を初期化し、2行目でリストを宣言して配列からリストに変換しています。</p>



<pre class="wp-block-code cs"><code>string&#91;] array = {"apple", "orange", "grapes"};
List&lt;string&gt; list = new List&lt;string&gt;(array);</code></pre>



<h2 class="wp-block-heading"><span id="toc3">リスト（List）から配列への変換</span></h2>



<p>リストから配列に変換する方法をご紹介します。</p>



<p>リスト List&lt;string&gt; から配列 string[] に変換するには<br><span class="marker-under-red">配列が持つメソッド ToArray() で変換すること</span>ができます。<br>※ ここでは例で型をstringで説明しています。</p>



<p>以下の例では1～4行目でリストを宣言・初期化し、6行目で ToArray() メソッドを使って配列に変換しています。</p>



<pre class="wp-block-code cs"><code>List&lt;string&gt; list = new List&lt;string&gt;();
list.Add("apple");
list.Add("orange");
list.Add("grapes");

string&#91;] array = list.ToArray();</code></pre>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/3343/">【C#】配列からリスト（List）、リスト（List）から配列へ変換</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/c-sharp/3343/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【C#】constを使用する時の注意点</title>
		<link>https://nyanblog2222.com/programming/c-sharp/1299/</link>
					<comments>https://nyanblog2222.com/programming/c-sharp/1299/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 09:05:00 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[const]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[struct]]></category>
		<category><![CDATA[定数]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=1299</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/97.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/97.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />こんにちは。前回は「const、readonly、static readonlyの使い方・違いについて」説明していきました。詳しくは、こちらの記事をご覧ください。 今回は前回入りきらなかった「const」を使用する時の注 [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/1299/">【C#】constを使用する時の注意点</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/97.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/97.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>こんにちは。前回は「const、readonly、static readonlyの使い方・違いについて」説明していきました。<br>詳しくは、こちらの記事をご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-nyanblog wp-block-embed-nyanblog"><div class="wp-block-embed__wrapper">

<a href="https://nyanblog2222.com/c-sharp/1279/" title="【C#】const、readonly、static readonlyの使い方・違いについて" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/96-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/96-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【C#】const、readonly、static readonlyの使い方・違いについて</div><div class="blogcard-snippet internal-blogcard-snippet">今回はC#の定数の定義について、ご紹介していきます。const、readonly、static readonlyについて、目にしたことはあると思います。では、それぞれの違いや使い方はご存じでしょうか。const：コンパイル時に決定する定数。readonly：読み取り専用のインスタンス。static r...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.06.15</div></div></div></div></a>
</div></figure>



<p><br>今回は前回入りきらなかった「const」を使用する時の注意点を解説していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">constのバージョン管理問題  </a></li><li><a href="#toc2" tabindex="0">列挙型の代わりに構造体のconstを使わない</a></li><li><a href="#toc3" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">constのバージョン管理問題  </span></h2>



<p>constで宣言した定数は<strong><span style="color:#b78d4a" class="has-inline-color">アクセス修飾子をpublicにすべきでない</span></strong>。と言われています。<br>なぜかというと、const定数はコンパイル時点で値が決定します。<br>例えば、クラスライブラリのMyClassには、constの定数”MAX_COUNT”が宣言されています。</p>



<pre class="wp-block-code cs"><code><strong>public</strong> <strong>class</strong> <strong>MyClass</strong> {
  <strong>public</strong> <strong>const</strong> <strong>int</strong> MAX_COUNT = 25;
}</code></pre>



<p>Program.exeに含まれるProcessクラスでは、ライブラリを読み込んでMyClass.MAX_COUNTを使います。</p>



<pre class="wp-block-code cs"><code><strong>public</strong> <strong>class</strong> <strong>Process</strong> {
  <strong>for</strong>(<strong>int</strong> i = 0; i &lt; MyClass.MAX_COUNT; i++) {
    …
  }
}</code></pre>



<p>仕様が変わりMAX_COUNTが30になったので、constの定数を変更しました。</p>



<pre class="wp-block-code cs"><code>public class MyClass {
  public const int MAX_COUNT = 30;
}</code></pre>



<p>このとき、クラスライブラリだけコンパイルして差し替えた場合、Program.exeで使用するときはMyClass.MAX_COUNTの値はどうなるでしょうか？</p>



<p>…正解は<strong><span class="has-inline-color has-pale-pink-color">MyClass.MAX_COUNTの値は25</span></strong>になります。</p>



<p>理由はProgram.exeで使用しているMyClass.MAX_COUNTの値は<strong><span style="color:#b78d4a" class="has-inline-color">Program.exeをコンパイルするときに値が決まっているから</span></strong>です。</p>



<p>これをバージョンアップするときに起こる問題として、<strong><span style="color:#b78d4a" class="has-inline-color">constのバージョン管理問題</span></strong>や<strong><span style="color:#b78d4a" class="has-inline-color">constのバージョニング問題</span></strong>と言います。</p>



<h2 class="wp-block-heading"><span id="toc2">列挙型の代わりに構造体のconstを使わない</span></h2>



<p>構造体のconstで、列挙型のような使い方をすると、予期せぬ不具合を生み出すことがあります。</p>



<p>こちらは構造体での使用例です。<br>12行目でstatusに&#8221;5&#8243;を設定していますが、何も問題なく<strong><span style="color:#b78d4a" class="has-inline-color">ビルドが通ります</span></strong>。</p>



<p>しかし、開発者はStatus構造体内の定数を設定したいはずなので、statusに&#8221;5&#8243;を代入してしまうことは以降の処理で不具合を起こしかねません。</p>



<pre class="wp-block-code cs"><code>struct Status
{
    public const int INIT = 0;
    public const int FAILED = 1;
    public const int SUCCESS = 2;
    public const int FINAL = 3;
}

var status = Status.INIT;

// Statusには存在しない値を設定できる
status = 5;</code></pre>



<p>続いて、列挙型での使用例です。<br>12行目のように列挙型での宣言後、<strong><span style="color:#b78d4a" class="has-inline-color">Statusに存在しない値を設定すると、ビルドエラー</span></strong>になります。</p>



<pre class="wp-block-code cs"><code>enum Status
{
    INIT = 0;
    FAILED = 1;
    SUCCESS = 2;
    FINAL = 3;
}

var status = Status.INIT;

// Statusに存在しない値を設定すると、ビルドエラーになる
status = 5;</code></pre>



<h2 class="wp-block-heading"><span id="toc3">まとめ</span></h2>



<p>今回は前回の定数の解説に引き続き、「const」に焦点を当てて注意点を解説していきました。</p>



<p>特に<strong><span style="color:#b78d4a" class="has-inline-color">「バージョン管理問題」</span></strong>は現象が起こった際にハマりやすいところだと思いますので、頭の片隅に置いておいた方が良いと思います！</p>



<p>良かったら他の記事もご覧になってください。</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/1299/">【C#】constを使用する時の注意点</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/c-sharp/1299/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【C#】const、readonly、static readonlyの使い方・違いについて</title>
		<link>https://nyanblog2222.com/programming/c-sharp/1279/</link>
					<comments>https://nyanblog2222.com/programming/c-sharp/1279/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Mon, 15 Jun 2020 09:00:00 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[const]]></category>
		<category><![CDATA[readonly]]></category>
		<category><![CDATA[static]]></category>
		<category><![CDATA[定数]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=1279</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/96.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/96.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />こんにちは。今回はC#の定数の定義について、ご紹介していきます。 const、readonly、static readonlyについて、目にしたことはあると思います。では、それぞれの違いや使い方はご存じでしょうか。 特に [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/1279/">【C#】const、readonly、static readonlyの使い方・違いについて</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/96.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/96.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>こんにちは。今回はC#の定数の定義について、ご紹介していきます。</p>



<p><strong><span style="color:#b78d4a" class="has-inline-color">const、readonly、static readonly</span></strong>について、目にしたことはあると思います。<br>では、それぞれの違いや使い方はご存じでしょうか。</p>



<p>特に今まで曖昧だった方向けに本記事をご覧になっていただければと思います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">constについて</a><ol><li><a href="#toc2" tabindex="0">使用例</a></li></ol></li><li><a href="#toc3" tabindex="0">readonlyについて</a><ol><li><a href="#toc4" tabindex="0">使用例</a></li><li><a href="#toc5" tabindex="0">補足</a></li></ol></li><li><a href="#toc6" tabindex="0">static readonlyについて</a><ol><li><a href="#toc7" tabindex="0">使用例</a></li></ol></li><li><a href="#toc8" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">constについて</span></h2>



<ul class="wp-block-list"><li><strong><span style="color:#b78d4a" class="has-inline-color">コンパイル時に決定する定数</span></strong></li><li>自動的にでstatic扱い。<br>生成したインスタンスから取得できない。</li><li>宣言時のみ初期化可能</li><li><strong><span style="color:#b78d4a" class="has-inline-color">文字列以外の参照型での初期化はできない。</span></strong><br>（生成したインスタンスは設定不可）</li><li>固定の値を埋め込むため、readonlyより処理速度が速い<br>ただし、ファイルサイズは大きくなる</li><li><strong><span style="color:#b78d4a" class="has-inline-color">デフォルト引数やswitchで使用可能</span></strong></li><li>publicで使用すると<strong><a class="link" href="https://nyanblog2222.com/c-sharp/1299/#const" target="_blank">constのバージョン管理問題</a></strong>があるため、privateでの使用を推奨</li></ul>



<h3 class="wp-block-heading"><span id="toc2">使用例</span></h3>



<pre class="wp-block-code cs"><code>/// &lt;summary>最大数&lt;/summary>
private const int MAX_COUNT = 5;
/// &lt;summary>みかん&lt;/summary>
private const string MIKAN = "みかん";

// 例：for文の条件式で使用
for (int i = 1; i &lt; MAX_COUNT; i++)
{
 // ...処理
}

// switch文の判定で使用
switch (fruits)
{
  case MIKAN:
    return 15;
    break;
  // ...処理
}</code></pre>



<h2 class="wp-block-heading"><span id="toc3">readonlyについて</span></h2>



<ul class="wp-block-list"><li><strong><span style="color:#b78d4a" class="has-inline-color">実行時に決定する</span></strong>読み取り専用変数</li><li><strong><span style="color:#b78d4a" class="has-inline-color">宣言、コンストラクタのどちらかで初期化</span></strong>が可能。<br>（コンストラクタ内で変更も可）</li><li>デフォルト引数やswitchで使用不可</li><li>生成したインスタンスを含め<strong><span style="color:#b78d4a" class="has-inline-color">あらゆる値型や参照型を設定することが可能</span></strong></li><li>constと比べ、ファイルサイズを下げることができるが、処理速度が遅い<br>（どちらも僅かなのでそこまで気にする必要はないと思います。）</li></ul>



<p>readonlyはコンストラクタ内で初期化、変更ができるのが大きな特徴となります。</p>



<h3 class="wp-block-heading"><span id="toc4">使用例</span></h3>



<pre class="wp-block-code cs"><code>class Program
{
    /// &lt;summary>
    /// メイン関数
    /// &lt;/summary>
    /// &lt;param name="args">引数&lt;/param>
    static void Main(string&#91;] args)
    {
        Class1 class1 = new Class1("読み取り専用");

        // コンソール画面に「読み取り専用」と出力
        Console.WriteLine(class1.YOMITORI_SENYOU);
    }
}

class Class1
{
    public readonly string YOMITORI_SENYOU;

    /// &lt;summary>
    /// コンストラクタ
    /// &lt;/summary>
    public Class1(string value)
    {
        YOMITORI_SENYOU = value;
    }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc5">補足</span></h3>



<p>読み取り専用のインスタンス変数という意味では、readonlyを使わず<span style="font-weight: bold; color: rgb(183, 141, 74);" class="has-inline-color">「setアクセサなし」の「getアクセサ」のみのプロパティを作成</span>しても、良いと思います。</p>



<pre class="wp-block-code cs"><code>// 例：setは記述されていないため、読み取り専用になります。
public string Fruits
{
    get { return "みかん"; }
}</code></pre>



<h2 class="wp-block-heading"><span id="toc6">static readonlyについて</span></h2>



<ul class="wp-block-list"><li>constと異なり、<strong><span style="color:#b78d4a" class="has-inline-color">バージョン管理問題が起こらない</span></strong>。</li><li><strong><span style="color:#b78d4a" class="has-inline-color">生成したインスタンス</span></strong>や<strong><span style="color:#b78d4a" class="has-inline-color">コンパイル時に計算できない値</span></strong>でも設定することができます。</li></ul>



<p>他はconstと同様の機能を持っています。</p>



<h3 class="wp-block-heading"><span id="toc7">使用例</span></h3>



<pre class="wp-block-code cs"><code>/// &lt;summary>テーブル一覧&lt;/summary>
public static readonly string&#91;] TABLE_LIST = { "table1", "table2", "table3" };

foreach (string table in TABLE_LIST)
{
    // ..処理
}</code></pre>



<h2 class="wp-block-heading"><span id="toc8">まとめ</span></h2>



<p>いかがでしたでしょうか。</p>



<p>本記事ではconstよりも<strong><span style="color:#b78d4a" class="has-inline-color">static readonly</span></strong>がおすすめさせていただきます。<br>また、読み取り専用のインスタンスとして、<strong><span style="color:#b78d4a" class="has-inline-color">readonly</span></strong>や<strong><span style="color:#b78d4a" class="has-inline-color">getアクセサのみのプロパティ</span></strong>で実行できます。</p>



<p>特にconstとstatic readonlyについては、バージョン管理問題があるため、さまざまな書籍で<strong><span style="color:#b78d4a" class="has-inline-color">static readonly</span></strong>を推奨しています。<br>※ 「実戦で役立つ　C#プログラミングのイディオム／定石＆パターン」etc.</p>



<p>必ずこの記述でないといけない。ということはありませんが、少なくとも<strong><span style="color:#b78d4a" class="has-inline-color">自分やプロジェクトチームではルールを決めて実装することが大事</span></strong>だと思います。</p>



<p>本記事をご覧いただき、ありがとうございました。</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/1279/">【C#】const、readonly、static readonlyの使い方・違いについて</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/c-sharp/1279/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【C#】Stringクラスで知っておくべきプロパティ・メソッド一覧</title>
		<link>https://nyanblog2222.com/programming/c-sharp/293/</link>
					<comments>https://nyanblog2222.com/programming/c-sharp/293/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Sat, 16 May 2020 09:00:00 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=293</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/95.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/95.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/95-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/95-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/95-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />文字列の操作でよく使うプロパティ、メソッドをまとめました。他にもあれば、どんどん追記していきます。 目次 文字列の長さを取得するLengthプロパティ文字列内に指定の文字（列）が含むかどうか、判定するContainsメソ [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/293/">【C#】Stringクラスで知っておくべきプロパティ・メソッド一覧</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/95.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/95.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/95-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/95-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/95-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>文字列の操作でよく使うプロパティ、メソッドをまとめました。<br>他にもあれば、どんどん追記していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">文字列の長さを取得する</a><ol><li><a href="#toc2" tabindex="0">Lengthプロパティ</a></li></ol></li><li><a href="#toc3" tabindex="0">文字列内に指定の文字（列）が含むかどうか、判定する</a><ol><li><a href="#toc4" tabindex="0">Containsメソッド</a></li><li><a href="#toc5" tabindex="0">StartsWithメソッド</a></li><li><a href="#toc6" tabindex="0">EndWithメソッド</a></li></ol></li><li><a href="#toc7" tabindex="0">文字列がnullか空文字か判定する</a><ol><li><a href="#toc8" tabindex="0">IsNullOrEmptyメソッド</a></li><li><a href="#toc9" tabindex="0">Emptyプロパティ</a></li><li><a href="#toc10" tabindex="0">IsNullOrWhiteSpaceメソッド【.Net Framework4.0以降】</a></li></ol></li><li><a href="#toc11" tabindex="0">文字列の一部を取り出す方法</a><ol><li><a href="#toc12" tabindex="0">SubStringメソッド</a></li></ol></li><li><a href="#toc13" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">文字列の長さを取得する</span></h2>



<h3 class="wp-block-heading"><span id="toc2">Lengthプロパティ</span></h3>



<p>文字列の長さ（文字数）を取得するには、<strong><span style="color:#b78d4a" class="has-inline-color">Lengthプロパティ</span></strong>を使用します。</p>



<pre class="wp-block-code cs"><code><strong>string</strong> str = "value";

<em>// length = 5</em>
<strong>int</strong> length = str.Length;</code></pre>



<h2 class="wp-block-heading"><span id="toc3">文字列内に指定の文字（列）が含むかどうか、判定する</span></h2>



<h3 class="wp-block-heading"><span id="toc4">Containsメソッド</span></h3>



<p>文字列内に指定の文字、または文字列が含まれているか判定するためには、<strong><span style="color:#b78d4a" class="has-inline-color">Containsメソッド</span></strong>を使用します。</p>



<pre class="wp-block-code cs"><code><strong>string</strong> str1 = "こんにちは。";

<em>// 引数 string型</em>
<strong>if</strong> (str1.Contains("ちは"))
    Console.WriteLine("ちは が含まれています。");

<em>// 引数 char型</em>
<strong>if</strong> (str1.Contains('に'))
    Console.WriteLine("に が含まれています。");</code></pre>



<pre class="wp-block-code plaintext"><code>ちは が含まれています。
に が含まれています。</code></pre>



<p>ちなみに、<strong><span style="color:#b78d4a" class="has-inline-color">IndexOfメソッド</span></strong>でも確認することができます。<br>文字列に含まれている文字（列）の位置を取得することができます。<br>含まれていない場合は<strong><span style="color:#b78d4a" class="has-inline-color">”-1”</span></strong>が戻り値として返されるので、<strong><span style="color:#b78d4a" class="has-inline-color">0以上の条件</span></strong>で検索をかけています。</p>



<pre class="wp-block-code cs"><code><strong>string</strong> str1 = "こんにちは。";

<em>// 引数 string型</em>
<strong>if</strong> (str1.IndexOf("ちは") &gt;= 0)
    Console.WriteLine("ちは が含まれています。");

<em>// 引数 char型</em>
<strong>if</strong> (str1.IndexOf('に') &gt;= 0)
    Console.WriteLine("に が含まれています。");</code></pre>



<pre class="wp-block-code plaintext"><code>ちは が含まれています。
に が含まれています。</code></pre>



<h3 class="wp-block-heading"><span id="toc5">StartsWithメソッド</span></h3>



<p>先頭が指定の文字列かどうかを判定には、<strong><span style="color:#b78d4a" class="has-inline-color">StartsWithメソッド</span></strong>を使用します。<br>3.の例では、<strong><span style="color:#b78d4a" class="has-inline-color">第２引数にtrueを設定する</span></strong>ことで大文字・小文字を考慮せずに判定することができます。</p>



<pre class="wp-block-code cs"><code>string str = "Program Test Hello";

if (str.StartsWith("Prog"))
    Console.WriteLine("1.先頭文字列が一致します。");

if (str.StartsWith("PROG"))
    Console.WriteLine("2.先頭文字列が一致します。");

if (str.StartsWith("PROG", true, CultureInfo.CurrentCulture))
    Console.WriteLine("3.先頭文字列が一致します。");</code></pre>



<pre class="wp-block-code plaintext"><code>1.後頭文字列が一致します。
3.後頭文字列が一致します。</code></pre>



<h3 class="wp-block-heading"><span id="toc6">EndWithメソッド</span></h3>



<p>先頭が指定の文字列かどうかを判定には、<strong><span style="color:#b78d4a" class="has-inline-color">EndWithメソッド</span></strong>を使用します。<br>3.の例では、StartWithメソッドと同様に大文字・小文字を考慮することなく、判定することができます。</p>



<pre class="wp-block-code cs"><code>string str = "Program Test Hello";

if (str.EndsWith("Hello"))
    Console.WriteLine("1.後頭文字列が一致します。");

if (str.EndsWith("HELLO"))
    Console.WriteLine("2.後頭文字列が一致します。");

if (str.EndsWith("HELLO", true, CultureInfo.CurrentCulture))
    Console.WriteLine("3.後頭文字列が一致します。");</code></pre>



<pre class="wp-block-code plaintext"><code>1.後頭文字列が一致します。
3.後頭文字列が一致します。</code></pre>



<h2 class="wp-block-heading"><span id="toc7">文字列がnullか空文字か判定する</span></h2>



<h3 class="wp-block-heading"><span id="toc8">IsNullOrEmptyメソッド</span></h3>



<p>文字列がnull、もしくは空文字かを調べるにはStringクラスの<strong><span style="color:#b78d4a" class="has-inline-color">IsNullOrEmptyメソッド</span></strong>を使用します。</p>



<pre class="wp-block-code cs"><code><strong>if</strong> (<strong>string</strong>.IsNullOrEmpty(str))
    Console.WriteLine("null もしくは 空文字です。");</code></pre>



<h3 class="wp-block-heading"><span id="toc9">Emptyプロパティ</span></h3>



<p>文字列がnullでないことが確実であれば、<strong><span style="color:#b78d4a" class="has-inline-color">Emptyメソッド</span></strong>で空文字かどうかを判定することもできます。また、<strong><span style="color:#b78d4a" class="has-inline-color">Emptyメソッドの代わりに&#8221;&#8221;で判定</span></strong>しても問題ありません。</p>



<pre class="wp-block-code cs"><code>if (str == string.Empty)
    Console.WriteLine("空文字です。");

// ""でもOK
if (str == "")
    Console.WriteLine("空文字です。");</code></pre>



<h3 class="wp-block-heading"><span id="toc10">IsNullOrWhiteSpaceメソッド【.Net Framework4.0以降】</span></h3>



<p><strong><span style="color:#b78d4a" class="has-inline-color">.Net Framework 4.0以上</span></strong>の場合、<strong><span style="color:#b78d4a" class="has-inline-color">IsNullOrEmptyメソッド</span></strong>で空白のみの文字列も判定することができます。</p>



<pre class="wp-block-code cs"><code><em>// null、""、" "（半角スペース）、 "　"（全角スペース）がtrueで返される</em>
<strong>if</strong> (<strong>string</strong>.IsNullOrEmpty(str))
    Console.WriteLine("null もしくは 空文字 もしくは 空白の文字列です。");</code></pre>



<h2 class="wp-block-heading"><span id="toc11">文字列の一部を取り出す方法</span></h2>



<h3 class="wp-block-heading"><span id="toc12">SubStringメソッド</span></h3>



<p>文字列に含まれている一部分を取り出すには<strong><span style="color:#b78d4a" class="has-inline-color">SubStringメソッド</span></strong>を使用します。<br>第1引数：取り出し開始位置<br>第2引数：取り出し文字数（省略で開始位置から最後まで取得）</p>



<pre class="wp-block-code cs"><code>string str = "Program Test Hello";

// 0バイト目から7文字分取り出す
Console.WriteLine(str.Substring(0, 7));

// 8バイト目から4文字分取り出す
Console.WriteLine(str.Substring(8, 4));

// 13バイト目から最後まで取り出す
Console.WriteLine(str.Substring(13));</code></pre>



<pre class="wp-block-code plaintext"><code>Program
Test
Hello</code></pre>



<p>文字の位置といえば、<strong><span style="color:#b78d4a" class="has-inline-color">IndexOfメソッド</span></strong>ですね！<br>このように使うこともできます。</p>



<pre class="wp-block-code cs"><code>string str = "Program Test Hello";
string getStr = "Test";
int index = str.IndexOf(getStr);

Console.WriteLine(str.Substring(index, getStr.Length));</code></pre>



<p>処理内容の説明です。<br>1行目：処理する文字列<br>2行目：取得する文字列<br>3行目：&#8221;Program Test Hello&#8221;から、&#8221;Test&#8221;の位置を取得し、<strong><span style="color:#b78d4a" class="has-inline-color">index変数に格納</span></strong><br>5行目：<strong><span style="color:#b78d4a" class="has-inline-color">Substringメソッド</span></strong>で<strong><span style="color:#b78d4a" class="has-inline-color">index変数の位置</span></strong>からgetStrの<strong><span style="color:#b78d4a" class="has-inline-color">Length分を取り出し</span></strong>、コンソールに出力</p>



<h2 class="wp-block-heading"><span id="toc13">まとめ</span></h2>



<p>stringクラスのプロパティやメソッドについて、ご紹介いたしました。<br>文字列操作の手段としてさまざまありますので、ぜひ参考にしてみてください。</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/293/">【C#】Stringクラスで知っておくべきプロパティ・メソッド一覧</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/c-sharp/293/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【C#】文字列を比較する（== 演算子、Equalメソッド、Compareメソッド）</title>
		<link>https://nyanblog2222.com/programming/c-sharp/193/</link>
					<comments>https://nyanblog2222.com/programming/c-sharp/193/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Mon, 04 May 2020 08:43:32 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=193</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/94.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/94.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/94-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/94-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/94-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />C#で文字列の比較方法は主に== 演算子、Equalメソッド、Compareメソッドがあります。それぞれ使用用途が異なりますので、用途に応じて使い分けていきましょう。 目次 == （等値）演算子の使用Equalメソッドの [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/193/">【C#】文字列を比較する（== 演算子、Equalメソッド、Compareメソッド）</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/94.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/94.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/94-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/94-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/94-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>C#で文字列の比較方法は主に== 演算子、Equalメソッド、Compareメソッドがあります。それぞれ使用用途が異なりますので、用途に応じて使い分けていきましょう。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">== （等値）演算子の使用</a></li><li><a href="#toc2" tabindex="0">Equalメソッドの使用</a><ol><li><a href="#toc3" tabindex="0">メソッドの使用用途</a></li><li><a href="#toc4" tabindex="0">== (等値)演算子との違い</a></li><li><a href="#toc5" tabindex="0">StringComparison列挙体の指定</a></li></ol></li><li><a href="#toc6" tabindex="0">string.Compareメソッドの使用</a><ol><li><a href="#toc7" tabindex="0">大文字・小文字を区別しない方法</a></li><li><a href="#toc8" tabindex="0">全角・半角を区別しない方法</a></li><li><a href="#toc9" tabindex="0">全角・半角、大文字・小文字を区別しない方法（複数オプション指定）</a></li></ol></li><li><a href="#toc10" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">== （等値）演算子の使用</span></h2>



<p>2つの文字列の内容が等しいかどうかを調べるには、<strong><span style="color:#b78d4a" class="has-inline-color">== <strong>（<strong>等値</strong>）</strong>演算子</span></strong>を使用します。<br>以下のようにオブジェクトが異なっていても、中身が同じであれば同一と判断します。</p>



<pre class="wp-block-code cs"><code>// 変数の設定
string str1 = "sample";
string str2 = "sample";

// 文字列の比較
if (str1 == str2)
{
    Console.WriteLine("文字列は同じです。");
}
else
{
    Console.WriteLine("文字列は異なります。");
}</code></pre>



<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow">
<p>■実行結果</p>



<pre class="wp-block-code"><code>文字列は同じです。</code></pre>
</div>



<p>また、文字列の小文字・大文字や全角・半角の区別はされますので、以下の場合、文字列は異なります。</p>



<pre class="wp-block-code cs"><code>// 変数の設定
string str1 = "Sample";
string str2 = "sample";

// 文字列の比較
if (str1 == str2)
{
    Console.WriteLine("文字列は同じです。");
}
else
{
    Console.WriteLine("文字列は異なります。");
}</code></pre>



<p>■実行結果</p>



<pre class="wp-block-code"><code>文字列は異なります。</code></pre>



<h2 class="wp-block-heading"><span id="toc2">Equalメソッドの使用</span></h2>



<h3 class="wp-block-heading"><span id="toc3">メソッドの使用用途</span></h3>



<p>等値演算子と同様に値の比較を行うメソッドが<strong><span style="color:#b78d4a" class="has-inline-color">Equalメソッド</span></strong>です。<br>以下のように使用します。</p>



<pre class="wp-block-code"><code>// 変数の設定
string str1 = "sample";
string str2 = "sample";

// 文字列の比較
if (str1.Equals(str2))
    Console.WriteLine("文字列は同じです。");</code></pre>



<p>■実行結果</p>



<pre class="wp-block-code"><code>文字列は同じです。</code></pre>



<h3 class="wp-block-heading"><span id="toc4">== (等値)演算子との違い</span></h3>



<p>等値演算子と同じように値の比較を行いますが、両者の違いは<strong><span style="color:#b78d4a" class="has-inline-color">ポリモーフィズム（多様性）</span></strong>です。等値演算子はオーバーロードされますが、Equalメソッドはオーバーライドされることで、比較結果が異なる場合があります。<br>以下の例を見てみましょう。</p>



<pre class="wp-block-code cs"><code>// 変数の設定
string str1 = new string(new char&#91;] { 's', 'a', 'm', 'p', 'l', 'e' });
string str2 = new string(new char&#91;] { 's', 'a', 'm', 'p', 'l', 'e' });

// 文字列の比較
Console.WriteLine("== 演算子での比較");
if (((object)str1) == ((object)str2))
{
    Console.WriteLine("文字列は同じです。");
}
else
{
    Console.WriteLine("文字列は異なります。");
}
Console.WriteLine("");

Console.WriteLine("Equalsメソッドでの比較");
if (((object)str1).Equals(((object)str2)))
{
    Console.WriteLine("文字列は同じです。");
}
else
{
    Console.WriteLine("文字列は異なります。");
}</code></pre>



<p>■実行結果</p>



<pre class="wp-block-code plaintext"><code>== 演算子での比較
文字列は異なります。

Equalsメソッドでの比較
文字列は同じです。</code></pre>



<p>この例では、stringで宣言した変数に対し、object型にアップキャストして比較しています。<br><strong><span style="color:#b78d4a" class="has-inline-color">== 演算子ではオーバーロード</span></strong>のため、object型同士の比較を行っており、falseで返します。<br>一方Equalメソッドでは、<strong><span style="color:#b78d4a" class="has-inline-color">string型でオーバーライド</span></strong>されたメソッドを使用しているため、trueを返します。<br>string型で文字列を扱っている場合には問題ありませんが、違いは知っていてもいいですね。</p>



<h3 class="wp-block-heading"><span id="toc5">StringComparison列挙体の指定</span></h3>



<p>Equalメソッドでは、StringComparison列挙体の値より、大文字・小文字や並べ替えの規則を指定して比較することができます。</p>



<figure class="wp-block-table">
    <table>
        <tbody>
            <tr>
                <th class="text-aline-center">フィールド</th>
                <th class="text-aline-center">説明</th>
            </tr>
            <tr>
                <th>CurrentCulture</th>
                <td>カルチャに依存した並べ替え規則と、現在のカルチャを使用して、文字列を比較します。</td>
            </tr>
            <tr>
                <th>CurrentCultureIgnoreCase</th>
                <td>カルチャに依存した並べ替え規則と、現在のカルチャを使用し、比較対象の文字列の大文字と小文字の区別を無視して、文字列を比較します。</td>
            </tr>
            <tr>
                <th>InvariantCulture</th>
                <td>カルチャに依存した並べ替え規則と、インバリアント カルチャを使用して、文字列を比較します。</td>
            </tr>
            <tr>
                <th>InvariantCultureIgnoreCase</th>
                <td>カルチャに依存した並べ替え規則と、インバリアント カルチャを使用し、比較対象の文字列の大文字と小文字の区別を無視して、文字列を比較します。</td>
            </tr>
            <tr>
                <th>Ordinal</th>
                <td>序数 (バイナリ) の並べ替え規則を使用して文字列を比較します。</td>
            </tr>
            <tr>
                <th>OrdinalIgnoreCase</th>
                <td>序数 (バイナリ) の並べ替え規則を使用し、比較対象の文字列の大文字と小文字の区別を無視して、文字列を比較します。</td>
            </tr>
        </tbody>
    </table>
    <p><a class="link" href="https://docs.microsoft.com/ja-jp/dotnet/api/system.stringcomparison?view=netcore-3.1">参考：StringComparison 列挙型</a></p>
</figure>



<h2 class="wp-block-heading"><span id="toc6">string.Compareメソッドの使用</span></h2>



<p>最後に<strong><span style="color:#b78d4a" class="has-inline-color">string.Compareメソッド</span></strong>で文字列の比較を行います。<br>Compareメソッドでは、文字列の値を比較するのではなく、<strong><span style="color:#b78d4a" class="has-inline-color">文字列の並び順を比較</span></strong>しています。以下のように使います。</p>



<pre class="wp-block-code"><code>// 変数の設定
string str1 = "sample";
string str2 = "sample";

// 文字列の比較
if (string.Compare(str1, str2) == 0)
    Console.WriteLine("文字列は同じです。");</code></pre>



<p>■実行結果</p>



<pre class="wp-block-code"><code>文字列は同じです。</code></pre>



<p>この例では、戻り値を0で返しています。<br>Compareメソッドは並び順を比較した結果を-1、0、1で返します。内容は以下の通りです。</p>



<p>string.Compare(A,B);<br>・AがBよりも順番が前：-1<br>・AがBの値が同じ：0<br>・AがBよりも順番が後：1</p>



<p>ちなみにstring.CompareメソッドとString.Compareメソッドがありますが、stringはStringのエイリアスなので、どちらを使用しても大丈夫です。</p>



<h3 class="wp-block-heading"><span id="toc7">大文字・小文字を区別しない方法</span></h3>



<p><strong><span style="color:#b78d4a" class="has-inline-color">第3引数にtrueを入れること</span></strong>で大文字と小文字の区別がなく比較することができます。<br>以下の例で比較結果が同じであることを確認しましょう。</p>



<pre class="wp-block-code cs"><code>// 変数の設定
string str1 = "sample";
string str2 = "SamPle";

// 文字列の比較
if (string.Compare(str1, str2, true) == 0)
    Console.WriteLine("文字列は同じです。");</code></pre>



<p>■実行結果</p>



<pre class="wp-block-code"><code>文字列は同じです。</code></pre>



<p>また、.Net Framework4.0以上を使用すると、trueを<strong><span style="color:#b78d4a" class="has-inline-color">名前付き引数</span></strong>で指定することができます。</p>



<pre class="wp-block-code cs"><code>if (string.Compare(str1, str2, ignoreCase:true) == 0)</code></pre>



<p>このように指定すると、引数の意味が分かりやすく可読性があがりますね。</p>



<h3 class="wp-block-heading"><span id="toc8">全角・半角を区別しない方法</span></h3>



<p>全角・半角を区別しない場合は、<strong><span style="color:#b78d4a" class="has-inline-color">CultureInfoとCompareOptions.IgnoreWidth</span></strong>を引数に設定します。<br>以降の例では<strong><span style="color:#b78d4a" class="has-inline-color">System.Globalization</span></strong>の名前空間を宣言しています。</p>



<pre class="wp-block-code cs"><code>// 変数の設定
string str1 = "sample";
string str2 = "ｓａｍｐｌｅ";
var cultureInfo = new CultureInfo("ja-JP");

// 文字列の比較
if (string.Compare(str1, str2, cultureInfo, CompareOptions.IgnoreWidth) == 0)
    Console.WriteLine("文字列は同じです。");</code></pre>



<p>■実行結果</p>



<pre class="wp-block-code"><code>文字列は同じです。</code></pre>



<h3 class="wp-block-heading"><span id="toc9">全角・半角、大文字・小文字を区別しない方法（複数オプション指定）</span></h3>



<p>全角・半角、大文字・小文字を区別しない場合は、<strong><span style="color:#b78d4a" class="has-inline-color">CompareOptions.IgnoreWidth</span></strong>と<strong><span style="color:#b78d4a" class="has-inline-color">CompareOptions.IgnoreCase</span></strong>をOR演算子で繋げることで複数の値を設定することができます。</p>



<pre class="wp-block-code cs"><code>// 変数の設定
string str1 = "sample";
string str2 = "ＳＡＭＰＬＥ";
var cultureInfo = new CultureInfo("ja-JP");

// 文字列の比較
if (string.Compare(str1, str2, cultureInfo,
  CompareOptions.IgnoreWidth | CompareOptions.IgnoreCase) == 0)
    Console.WriteLine("文字列は同じです。");</code></pre>



<p>■実行結果</p>



<pre class="wp-block-code"><code>文字列は同じです。</code></pre>



<p>ちなみに<strong><span style="color:#b78d4a" class="has-inline-color">CompareOptions.OrdinalIgnoreCase</span></strong>も大文字・小文字を区別しませんが、上記のように複数値の設定では使用できませんでした。</p>



<p>他にもひらがなとカタカナを区別しない<strong><span style="color:#b78d4a" class="has-inline-color">CompareOptions.IgnoreKanaType</span></strong>も存在しますので、以下を参考にしてみてください。<br>参考：<a rel="noopener" class="link" href="https://docs.microsoft.com/ja-jp/dotnet/api/system.globalization.compareoptions?view=netcore-3.1" target="_blank">CompareOptions 列挙型</a></p>



<h2 class="wp-block-heading"><span id="toc10">まとめ</span></h2>



<p>今回はC#で文字列の比較方法について、ご紹介いたしました。<br><strong><span style="color:#b78d4a" class="has-inline-color">文字列の値の比較は==（等値）演算子、Equalメソッド</span></strong>を、<strong><span style="color:#b78d4a" class="has-inline-color">並び順はstring.Compareメソッド</span></strong>を使って、試してみてください。</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/193/">【C#】文字列を比較する（== 演算子、Equalメソッド、Compareメソッド）</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/c-sharp/193/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
