gpt4 book ai didi

c# - XSD、泛型和 C# 类的困境

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:14 25 4
gpt4 key购买 nike

我有以下简单的 XSD 文件:

  <xs:element name="Search" type="SearchObject"/>

<xs:complexType name="SearchObject">
<xs:choice>
<xs:element name="Simple" type="SimpleSearch"/>
<xs:element name="Extended" type="ExtendedSearch"/>
</xs:choice>
</xs:complexType>

<xs:complexType name="SimpleSearch">
<xs:sequence>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="LastName" type="xs:string"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="ExtendedSearch">
<xs:sequence>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="LastName" type="xs:string"/>
<xs:element name="Age" type="xs:int"/>
<xs:element name="Address" type="xs:string"/>
</xs:sequence>
</xs:complexType>

我像这样使用 Visual Studio Shell:

xsd XMLSchema.xsd /c

基本上/c 代表从 XMLSchema.xsd 生成 C# 类。

然后这些类看起来像这样:

[System.Xml.Serialization.XmlRootAttribute("Search", Namespace="http://tempuri.org/XMLSchema.xsd", IsNullable=false)]
public partial class SearchObject {

private object itemField;

[System.Xml.Serialization.XmlElementAttribute("Extended", typeof(ExtendedSearch))]
[System.Xml.Serialization.XmlElementAttribute("Simple", typeof(SimpleSearch))]
public object Item {
get {
return this.itemField;
}
set {
this.itemField = value;
}
}
}

我的第一个问题是,为什么属性“Item”没有像我在该元素的 xsd 文件中设置的那样称为“Search”?

我的第二个问题是为什么属性Item是object类型的?我在我的 xsd 文件中设置了一个选项,我希望 C# 代码看起来更像这样:

public partial class SearchObject<T> where T : SimpleSearch, where T : ExtendedSearch
{
public T Search
{
get ...
set ...
}
}

我希望有一个通用类,它只允许我在 xsd 文件的选择 block 中指定的类型,在我的例子中是 SimpleSearch 和 ExtendedSearch。

这有可能吗?如果可以,我该如何做对?

最佳答案

在 xsd 中的选择意味着您可以声明不同的对象类型之一。因此,xsd.exe 生成一个对象(始终命名为 Item)而不是强类型。请参阅:http://msdn.microsoft.com/en-us/library/sa6z5baz(v=vs.85).aspx .您必须在运行时检查对象类型是什么:

ExtendedSearch extendedSearch = null;
SimpleSearch simpleSearch = null;
if(Item is ExtendedSearch)
extendedSearch = (ExtendedSearch)Item;
else if(Item is SimpleSearch)
simpleSearch = (SimpleSearch)Item;

关于c# - XSD、泛型和 C# 类的困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16574822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com