gpt4 book ai didi

c# - 使用泛型乘以整数

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:22 24 4
gpt4 key购买 nike

我有一个名为 GenericItem 的类(第一次使用泛型),假设我想乘以整数类型的两个项目,如您所见,我正在 returnCounterMultiply 方法中尝试, 但它不允许我将它们相乘,尽管我正在尝试转换它们并检查它们是否为整数类型。

namespace Components
{
public class GenericItem<T>
{
private T data;
private T counter;

public T Data
{
get { return data; }
set { data = value; }
}

public GenericItem(){}
public GenericItem(T _data)
{
data = _data;
}

public T returnCounterMultiply(T value)
{
int c = 0;
int d = 0;
if (counter.GetType() == typeof(int) && value.GetType() == typeof(int))
{
//cant multiply two of type T, why if i am converting to int?.
return (T)Convert.ChangeType(counter, typeof(Int32)) * (T)Convert.ChangeType(value, typeof(Int32));
}
return value;
}

}
}

我会很感激对此的一些解释,因为这是我第一次处理它(这只是一个示例类,用于理解这个 GENERICS INTRO 和这个 GENERICS CLASSES,但仍然难以理解它。

最佳答案

我不明白你想要达到什么目的,但如果你必须这样做,我认为你必须使用一个界面:

public interface IMultiplyable<T>
{
T Multiply(T x);
}

public class Int : IMultiplyable<Int>
{
private int _data { get; set; }

public Int(int data)
{
_data = data;
}

public Int Multiply(Int x)
{
return new Int(_data * x._data);
}

public override string ToString()
{
return _data.ToString();
}
}

public class GenericItem<T> where T : IMultiplyable<T>
{
private T data;
private T counter;

public T Data
{
get { return data; }
set { data = value; }
}

public GenericItem() { }
public GenericItem(T _data)
{
data = _data;
}

public T returnCounterMultiply(T value)
{
return Data.Multiply(value);
}

public override string ToString()
{
return Data.ToString();
}
}

用法:

        var a = new GenericItem<Int>(new Int(4));
MessageBox.Show(a.returnCounterMultiply(new Int(5)).ToString()); //20

关于c# - 使用泛型乘以整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21595664/

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