【发布时间】:2023-03-26 01:15:01
【问题描述】:
我正在尝试创建一种将 int 映射到 string 并将 string 映射到 int 的方法。我有想法用一种方法来做,但不确定这是否可行。
我已经走到这一步了:
class MappingWithGenerics
{
[Test]
public void IntToString()
{
string actual = Map<int, string>(1);
Assert.AreEqual("1", actual);
}
[Test]
public void StringToInt()
{
int actual = Map<string, int>("1");
Assert.AreEqual(1, actual);
}
public TOut Map<Tin, TOut>(Tin element)
{
if(element.GetType() == typeof(int))
return element.ToString();
return Convert.ToInt32(element);
}
}
这会产生编译错误。
无法将类型“int”隐式转换为“TOut”
无法将类型“字符串”隐式转换为“TOut”
知道如何实现 Map 方法吗?
【问题讨论】:
-
“这会产生编译错误” - 什么 编译错误?错误信息是什么?什么线?请不要让我们为您尝试,只是为了获得与您已有的信息相同的信息。
-
话虽如此,
if(element.GetType() == typeof(int))可能是一个危险信号。一般来说,您应该完全在您希望所有类型的相同行为的地方使用泛型,因此区分您正在查看的类型似乎是矛盾的。 -
您的方法签名说它正在返回一个
TOut对象,但您正试图返回一个string或int。您的泛型在这里没有用处。 -
抱歉,编译错误是:无法将类型'int'隐式转换为'TOut' 无法将类型'string'隐式转换为'TOut'