[下手なタイトルでごめんなさい - 私がやろうとしていることを表現する最善の方法がわかりませんでした。]
少しばかげているように感じます-次のコードでバグを発見しました:
private static XmlSchemaSet internalSchema = null;
private static XmlSchemaSet externalSchema = null;
private static XmlSchemaSet GetSchema(SchemaType schemaType)
{
// Lazy evaluation of schema objects - only create internal
// and external schema once
XmlSchemaSet schema =
schemaType == SchemaType.Internal ? internalSchema : externalSchema;
if (schema == null)
{
schema = new XmlSchemaSet();
schema.Add("", CreateXmlSchemaFile(schemaType));
}
return schema;
}
コードの目的は、静的メンバーinternalSchema
をexternalSchema
最初に要求されたときに 1 回だけ割り当てることです。
もちろん、私が試みた簡潔なコードには明らかなバグがあります。schema
ローカル参照は、またはが指している (最初は)オブジェクトを指していますが、 を呼び出すとすぐに、静的メンバーではなく、ローカル参照のみが再割り当てされます。internalSchema
externalSchema
null
new
私がやろうとしていることを達成する簡単な方法はありますか? XmlSchemaSet
viaキーワードを取る別のメソッドを作成できると思いますがref
、このためだけに別のメソッドを作成するのはばかげているようです。