我在C#中创建一个需要存储参数的类。该参数可以是不同类型的,例如float,int等甚至是类似Vector3类的类。
如何在C#中设计?我之前在C ++中使用Qt的QVariant类完成了这个。有关说明,请参阅以下UML图。
因此,我们的想法是拥有一个存储一个值的Parameter类。该值可以是各种类型。您可以使用像ToFloat()这样的方法将值转换为float(如果可以的话)。
这可以用System.Object
类实现(我认为)。但这不是我认为最好的选择。如果以这种方式实施,性能就不那么好:性能:Boxing and Unboxing
答案 0 :(得分:0)
根据Daniel的建议,我使用了从参数派生的模板类。这是我使用的代码:
public class Parameter {
public System.Type type { get; private set; }
protected Parameter(System.Type type) {
this.type = type;
}
public bool IsA<T>() {
return type.Equals(typeof(T));
}
public T Get<T>() {
return ((ParameterType<T>)this).val;
}
static public Parameter Create<T>(T defaultVal) {
return new ParameterType<T>(defaultVal);
}
}
class ParameterType<T> : Parameter {
public T val { get; set; }
public ParameterType() : base(typeof(T)) {
}
public ParameterType(T value) : base(typeof(T)) {
this.val = value;
}
}
样本用法:
List<Parameter> parameters = new List<Parameter>();
parameters.Add(Parameter.Create<int>(15));
parameters.Add(Parameter.Create<float>(10F));
int val1 = parameters[0].Get<int>();
float val2 = parameters[1].Get<float>();
// This will throw a InvalidCastException as intended
double val3 = parameters[0].Get<double>();