C#

スレッドセーフな配列(List,Dictionary,Queue,Stack)を作成する。(SyncRoot,Synchronized)ジェネリック版。

C#

基本的に配列の操作はスレッドセーフではないので(あるスレッドが配列に追加・削除している途中で、別スレッドでFor Eachしたら正しく列挙できない)マルチスレッドで配列のデータを操作する場合は、同時に実行されないようにロックする必要があります。非…

配列のジェネリック型と非ジェネリック型の対応(ArrayList,HashTable,Queue,Stack)

C#

非ジェネリック → ジェネリックの対応一覧。ジェネリック型は、Objectを操作する非ジェネリック型と違い、配列に格納する型(String,Integer・・etc)に合わせたタイプセーフな配列として定義できます。ArrayListとHashTableは名前が変わっているので要注意…

スレッドセーフな配列(ArrayList,HashTable,Queue,Stack)を作成する。(SyncRoot,Synchronized)非ジェネリック版。

C#

基本的に配列の操作はスレッドセーフではないので(あるスレッドが配列に追加・削除している途中で、別スレッドでFor Eachしたら正しく列挙できない)マルチスレッドで配列のデータを操作する場合は、同時に実行されないようにロックする必要があります。■lo…

ウインドウメッセージのリフティング処理(PostMessageの隠れた使い方)

ウインドウアプリケーションでは、ウインドウそれぞれがメッセージキューを持っていて順番にメッセージを処理します。処理が終わるまでは、次のメッセージは処理されません。この特性を利用して、処理のタイミングを調整するプログラミングテクニックをウイ…

アトリビュートを指定してXMLのシリアライズに対応したクラスを作成する。1要素に値と属性を持つ場合。(XmlTextAttribute)

C#

XMLシリアライズは、クラスのメンバに1対1でXMLの要素や属性が対応します。ですが、以下のようなname要素に属性(japan)と値(taro kobe)を持つXMLの場合は、2つ以上のメンバをXMLの1要素として対応付けさせる必要があります。 taro kobe manager この…

Visual Source Safe (VSS) と Visual Studio のバインドを解除する

VSS 管理下にあるプロジェクトをVSSに接続できない環境に持っていく、自動ビルドやバッチでの静的解析の際にバインド情報が残存しているとバッチ処理に失敗するなど、VSSのバインド情報を削除する必要があります。今回は、VSSのバインド情報が、どのように構…

xsdによるクラスの自動生成。自動生成で対応できないクラスを調整する。(2次元配列のメンバー)

C#

xsdツールで自動生成したクラスをXMLSerializerで読み込もうとした場合に例外が発生するケースがあります。これはXSDが対応できていないタイプのXMLです。 Message="一時クラスを生成できません (result=1)。\r\nerror CS0030: 型 'XMLAttributeTest.Company…

アトリビュートを指定してXMLのシリアライズに対応したクラスを作成する。配列(List)を出力する場合。(XmlArrayAttribute、 XmlArrayItemAttribute)

C#

配列をXMLシリアライズを使用して出力する場合は次の専用のアトリビュートを指定します。・[System.Xml.Serialization.XmlArrayAttribute("Members")] ・[System.Xml.Serialization.XmlArrayItemAttribute("Member")]この2つのアトリビュートはペアで指定し…

アトリビュートを指定してXMLのシリアライズに対応したクラスを作成する。(XmlRootAttribute, XmlAttributeAttribute, XmlElementAttribute)

C#

XMLでシリアライズ可能なクラスを定義する場合は、クラスとメンバにそれぞれXMLのタグを示すアトリビュートを設定します。以下の3つのアトリビュートが基本となります。■ [System.Xml.Serialization.XmlRootAttribute("Company")] XMLのルートノードに対応…

xsd (XML Schema Definition Language)によって、XMLを検証する(Validate)

C#

XSD(XML Schema Definition Language)はXMLの構造を定義したファイルで、XSDを使用してXMLの構造が正しいかどうか検証することが出来ます。 これには、XmlReader、XmlReaderSettings、XmlSchemaSetクラスを利用します。name要素とjob要素が必ず1つ必要なXSD…

xmlSerializeによるXML出力時にencoding属性を付与する

C#

xmlSerializerを使用してシリアライズ(serialize)する際にFileStreamを使用して出力すると、下記のようなEncoding属性が付与されません。 xml version="1.0" encoding="utf-8" Encoding属性を指定するにはStreamWriterを使用して設定したいEncodingを使用す…

xmlSerializerによるXML出力時にnamespaceを付与しない

C#

xmlSerializerを使用してシリアライズ(serialize)すると、以下のようにxmlns:xsiやxmlns:xsdといった名前空間が出力されます。 ですが、このような名前空間は不要ということもあると思います。 その場合は、シリアライズ(serialize)時に空の名前空間オブジェ…

xsdによるクラスの自動生成

C#

Visual studio に付属しているxsdツールは、xmlからxsd (xml schema)、xsdからc#,vb.netのクラスを自動生成することができます。 xmlファイルを読み込もうとしている場合、xsdやC#,vb.Netのクラスを手書きするのではなく、xsdツールを使って生成すると便利で…

xmlSerializerによるXMLの読み書き

C#

xmlの読み書きにはXMLSerializerを使用します。シリアライズとは永続化の意味で、ヒープメモリ上に存在するオブジェクトをファイルやデータベースなどに保存する事を意味します。また、保存したデータからヒープメモリ上にオブジェクトを生成することをデシ…