我有以下界面来定义dynamic AcceptableValue {get; set;}
。
我知道界面应该总是有一些具体的东西,而不是dynamic
或object
,但我在如何在没有定义dynamic AcceptableValue
的情况下完成这项任务的过程中遇到了一些麻烦。 / p>
我想我可以从接口中取出字段AcceptableValue并在每个类中使用正确的类型声明它,但我认为必须有更好的方法...
interface IPrerequisite
{
string Name { get; set; }
dynamic AcceptableValue { get; set; }
string FailureText { get; set; }
string SuccessText { get; set; }
bool Validate();
}
public class Ram : IPrerequisite
{
public Ram(string name = "RAM Requirements", string value = "2048", string successText = "Minimum {0}MB RAM required", string failureText = "Minimum {0}MB RAM required")
{
Name = name;
AcceptableValue = value;
SuccessText = successText;
FailureText = failureText;
}
public string Name { get; set; }
public dynamic AcceptableValue { get; set; }
public string SuccessText { get; set; }
public string FailureText { get; set; }
public bool Validate()
{
var ram = GetRam();
return ram >= AcceptableValue;
}
}
public class DeviceModel : IPrerequisite
{
public class Device
{
public string Manufacturer { get; set; }
public string Model { get; set; }
}
private IList<Device> _value;
public DeviceModel(string name = "Computer Model Support", IList<Device> value = null, string successText = "Computer Model '{0}' Supported", string failureText = "Computer Model '{0}' not Supported")
{
Name = name;
_value = value;
SuccessText = successText;
FailureText = failureText;
}
public string Name { get; set; }
public dynamic AcceptableValue
{
get { return _value; }
set { _value = value; }
}
public IList<Device> GetSupportedModels()
{
return _value;
}
public void AddSupportedModel(string manufacturer, string model)
{
if (_value.Any(aDevice => aDevice.Manufacturer == manufacturer && aDevice.Model == model))
{
return;
}
var device = new Device {Manufacturer = manufacturer, Model = model};
_value.Add(device);
}
public void RemoveSupportedModel(string manufacturer, string model)
{
var supportedModel = _value.First(device => device.Manufacturer == manufacturer && device.Model == model);
_value.Remove(supportedModel);
}
private bool IsModelSupported(string manufacturer, string model)
{
return _value.Any(device => device.Manufacturer == manufacturer && device.Model == model);
}
public string SuccessText { get; set; }
public string FailureText { get; set; }
public bool Validate()
{
return IsModelSupported(GetComputerManufacturer(), GetComputerModel());
}
}