我想要创建一个类,它可以在to值之间保留一个数字。在这里,我创建了我的前两个泛型类。
第一个名为LimitRang,并保留两个极限范围变量;一个用于较低的范围,另一个用于顶部的范围。第二个名为NumberLimitRang,并保留该数字和第一类LimitRang。
当我尝试创建变量mvarRang时,LimitRang变量如何在NumberLimitRang的构造函数中接收到错误:“不能隐式地将'VariableTypes.Supplement.LimitRang‘类型转换为'T’。
我的LimitRang代码:
namespace VariableTypes.Supplement
{
/// <summary>
/// Manage the boundaries for a number.
/// </summary>
/// <typeparam name="T">The numberic type for the limit parameters</typeparam>
public class LimitRang<T> where T : IComparable
{
private T mvarLowestLimitNumber;
private T mvarHighestLimitNumber;
/// <summary>
/// The default constructor (between 0 and 100)
/// </summary>
public LimitRang()
{
if (Functions.IsNumericType(typeof(T)))
{
try
{
mvarLowestLimitNumber = (T)Convert.ChangeType(0, typeof(T));
mvarHighestLimitNumber = (T)Convert.ChangeType(100, typeof(T));
}
catch
{
mvarLowestLimitNumber = default(T);
mvarHighestLimitNumber = default(T);
}
}
}
}
}我的NumberLimitRang代码:
namespace VariableTypes
{
/// <summary>
/// Can contain a number that need to be between or equal to two limit numbers
/// </summary>
public class NumberLimitRang<T> where T : IComparable
{
private Supplement.LimitRang<T> mvarRang;
private T mvarNumber;
/// <summary>
/// The default constructor (between 0 and 100/Number = 0)
/// </summary>
public NumberLimitRang(T mvarRang)
{
mvarRang = new Supplement.LimitRang<T>();
mvarNumber = (T)Convert.ChangeType(0, typeof(T));
}
}
}即使将两个T替换为int,我仍然会收到错误:
- private Supplement.LimitRang<int> mvarRang;
- mvarRang = new Supplement.LimitRang<int>();你能告诉我我做错了什么吗?
Thx很多
发布于 2017-01-11 09:56:11
问题在于:
public NumberLimitRang(T mvarRang)
{
mvarRang = new LimitRang<T>();
mvarNumber = (T)Convert.ChangeType(0, typeof(T));
}您将mvarRang作为参数传递,并且有名为mvarRang的字段。但是在方法NumberLimitRang编译器中使用mvarRang作为参数,wich类型的T和tryes用new LimitRang<T>();替换它的值。因此,首先,重命名字段或参数。例如:
public class NumberLimitRang<T> where T : IComparable
{
private LimitRang<T> _mvarRang;
private T _mvarNumber;
/// <summary>
/// The default constructor (between 0 and 100/Number = 0)
/// </summary>
public NumberLimitRang(T mvarRang)
{
_mvarRang = new LimitRang<T>();
_mvarNumber = (T)Convert.ChangeType(0, typeof(T));
}
}在开始时用_命名字段是很好的做法。
但是现在,您的论点mvarRang是不被使用的。用代码修改您的逻辑。
发布于 2017-01-11 09:52:46
public NumberLimitRang(T mvarRang)
{
mvarRang = new Supplement.LimitRang<T>();
mvarNumber = (T)Convert.ChangeType(0, typeof(T));
}构造函数接受类型为mvarRang的变量T。此声明隐藏类型为mvarRang的实例成员LimitRang<T>。
要么更改参数名称,要么使用this显式引用实例成员
public NumberLimitRang(T mvarRang)
{
this.mvarRang = new Supplement.LimitRang<T>();
mvarNumber = (T)Convert.ChangeType(0, typeof(T));
}https://stackoverflow.com/questions/41587451
复制相似问题