F-ES Sitecore
Компилятор не знает, что такое "T", поскольку это определяется вызывающим кодом - это может быть что угодно, строка, двойник, класс животных. Поэтому он не может выделить его для вашего параметра int.
Вам придется бросить "T" в int, прежде чем вы назначите его своей собственности. Однако ваш код может работать только в том случае, если "T" является int, так что это бессмысленное использование дженериков, если универсальный класс может поддерживать только один тип, вы можете вообще не использовать дженерики и использовать вместо них сильные типы.
Обновленный;
Я бы написал это примерно так, как показано ниже, однако еще раз подчеркиваю, что использование дженериков здесь немного бессмысленно. Обычно можно иметь дело с типами полностью обобщенно или иметь дело с базовыми типами, но писать исключения для каждого типа-это просто плохая практика.
public class MyClass<T>
{
public T iLeft { get; set; }
public string sLeft { get { return this.iLeft.ToString(); } }
public MyClass(T left)
{
iLeft = left;
}
public static implicit operator MyClass<T>(T left)
{
return new MyClass<T>(left);
}
public static implicit operator Int32(MyClass<T> left)
{
if (typeof(T).Equals(typeof(Int32)))
{
return (int)(object)left.iLeft;
}
else
{
return -1;
}
}
}
class Program
{
static void Main(string[] args)
{
MyClass<int> r = 5;
MyClass<int> x = 10;
Console.WriteLine("r after creation = " + r.iLeft);
Console.WriteLine("x after creation = " + x.iLeft);
r = 3;
Console.WriteLine("r after assignment = " + r.iLeft);
int rAsInt = r;
int xAsInt = x;
Console.WriteLine("rAsInt = " + rAsInt);
Console.WriteLine("xAsInt = " + xAsInt);
int y = x * 2;
Console.WriteLine("x * 2 = " + y);
int z = r * x;
Console.WriteLine("r * x as ints= " + z);
MyClass<int> classMult = r * x;
Console.WriteLine("r * x as MyClass<int> = " + classMult);
Console.ReadLine();
po_saa
Спасибо за ответ.
На самом деле он работает только с "int" только для учебных целей
> & gt;компилятор не знает, что такое " T"
Тем не менее во время выполнения я создаю MyClass< int>, когда объявляется "r" и конструктор MyClass правильно принимает int
Итак, не могли бы вы предложить
как исправить код? (некоторое время работать только с int)