gpt4 book ai didi

具有通用结构的 C# 类设计

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

这可能是一个简单的问题,但我的头脑拒绝绕过它,所以在这种情况下,外部 View 总是有用的!

我需要设计一个对象层次结构来为患者实现参数注册。这将在特定日期进行,并收集有关患者的许多不同参数(血压、心率等)。这些参数注册的值可以是不同的类型,例如字符串、整数、 float 甚至 guid(用于查找列表)。

所以我们有:

public class ParameterRegistration
{
public DateTime RegistrationDate { get; set; }
public IList<ParameterRegistrationValue> ParameterRegistrationValues { get; set; }
}

public class ParameterRegistrationValue
{
public Parameter Parameter { get; set; }
public RegistrationValue RegistrationValue { get; set; } // this needs to accomodate the different possible types of registrations!
}


public class Parameter
{
// some general information about Parameters
}

public class RegistrationValue<T>
{
public RegistrationValue(T value)
{
Value = value;
}

public T Value { get; private set; }
}

更新:感谢这些建议,该模型现已演变为以下内容:

public class ParameterRegistration
{
public DateTime RegistrationDate { get; set; }
public IList<ParameterRegistrationValue> ParameterRegistrationValues { get; set; }
}

public abstract class ParameterRegistrationValue()
{
public static ParameterRegistrationValue CreateParameterRegistrationValue(ParameterType type)
{
switch(type)
{
case ParameterType.Integer:
return new ParameterRegistrationValue<Int32>();
case ParameterType.String:
return new ParameterRegistrationValue<String>();
case ParameterType.Guid:
return new ParameterRegistrationValue<Guid>();
default: throw new ArgumentOutOfRangeException("Invalid ParameterType: " + type);
}
}
public Parameter Parameter { get; set; }
}

public class ParameterRegistrationValue<T> : ParameterRegistrationValue
{
public T RegistrationValue {get; set; }
}

public enum ParameterType
{
Integer,
Guid,
String
}

public class Parameter
{
public string ParameterName { get; set; }
public ParameterType ParameterType { get; set;}
}

这确实有点简单,但现在我想知道,既然 ParameterRegistration 中的 IList 指向 abstract ParameterRegistrationValue 对象,我如何才能得到实际值(因为它存储在子对象上)?

也许整个通用的东西毕竟不是完全可行的方法 :s

最佳答案

如果您不知道最终的参数集和每个参数的相应类型,那么泛型可能无济于事 - 使用对象作为参数值类型。

此外,遍历参数列表会很痛苦,因为您必须检查每个项目的类型以确定如何处理该值。

你想用泛型实现什么?是的,它们很酷(进行装箱/拆箱可能不是一个好主意),但在某些情况下,您可能想改用 object(为了简单性和灵 active )。

-- 帕维尔

关于具有通用结构的 C# 类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4592229/

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