基于另一个成员类型的C#.NET类成员类型

基于另一个成员类型的C#.NET类成员类型,c#,.net,wcf,class,C#,.net,Wcf,Class,有一个类定义了一个几何体,它包括两个成员,“类型”和“坐标” 是否有一种方法可以根据“type”的值动态定义坐标成员类型?例如,如果“类型”是“多行线”,则坐标类型将是字符串?否,这是不可能的。最接近的方法是定义如下的泛型类: [DataContract] public class geometry<T> where T : struct { [DataMember] public T coordinates; } var geom = new geometry&l

有一个类定义了一个几何体,它包括两个成员,“类型”和“坐标”


是否有一种方法可以根据“type”的值动态定义坐标成员类型?例如,如果“类型”是“多行线”,则坐标类型将是字符串?

否,这是不可能的。最接近的方法是定义如下的泛型类:

[DataContract]
public class geometry<T> where T : struct
{
    [DataMember]
    public T coordinates;
}
var geom = new geometry<float>();
geom.coordinates = 1.0f;
[DataContract]
public class geometry<T> where T : struct
{
    [DataMember]
    public readonly string type = typeof(T).Name;

    [DataMember]
    public T coordinates;
}

var geom = new geometry<float>();
Console.WriteLine(geom.type); // Single
[DataContract]
公共类几何体,其中T:struct
{
[数据成员]
公共T坐标;
}
然后像这样使用它:

[DataContract]
public class geometry<T> where T : struct
{
    [DataMember]
    public T coordinates;
}
var geom = new geometry<float>();
geom.coordinates = 1.0f;
[DataContract]
public class geometry<T> where T : struct
{
    [DataMember]
    public readonly string type = typeof(T).Name;

    [DataMember]
    public T coordinates;
}

var geom = new geometry<float>();
Console.WriteLine(geom.type); // Single
var geom=新几何体();
几何坐标=1.0f;
如果您确实希望将类型成员放在那里(例如,出于序列化目的),则可以使用如下内容:

[DataContract]
public class geometry<T> where T : struct
{
    [DataMember]
    public T coordinates;
}
var geom = new geometry<float>();
geom.coordinates = 1.0f;
[DataContract]
public class geometry<T> where T : struct
{
    [DataMember]
    public readonly string type = typeof(T).Name;

    [DataMember]
    public T coordinates;
}

var geom = new geometry<float>();
Console.WriteLine(geom.type); // Single
[DataContract]
公共类几何体,其中T:struct
{
[数据成员]
公共只读字符串类型=typeof(T).Name;
[数据成员]
公共T坐标;
}
var geom=新几何体();
Console.WriteLine(几何类型);//单身

您始终可以选择使用
动态
对象
作为类型,尽管我希望有更好的选择。我将给出一个我认为更好的使用泛型的示例。如果您使用WCF,那么将其添加为标记,大多数优秀的.net设计不适用于WCF,因此您需要WCF专家提供答案。请注意,由于您使用这些作为数据协定定义,在关闭泛型的情况下无法序列化泛型实例。e、 例如,不能让操作契约包含返回
几何体的方法或将其作为参数接受的方法。但是,您可以让服务方法返回和/或接收
几何体
几何体
,等等@PrestonGuillot这是一个很好的观点。我从未尝试过,但我一直想知道,
KnownType
属性是否能够绕过这个限制?