【发布时间】:2023-03-10 09:00:04
【问题描述】:
考虑以下代码;
class SomeType1
{
}
class SomeType2
{
}
class CombinedType
{
public static implicit operator CombinedType(SomeType1 source)
{
return new CombinedType
{
...
};
}
public static implicit operator CombinedType(SomeType2 source)
{
return new CombinedType
{
...
};
}
}
void SomeMethod()
{
var listOfType1 = new List<SomeType1>();
DoSomethingWith(listOfType1);
var listOfType2 = new List<SomeType2>();
DoSomethingWith(listOfType2);
}
void DoSomethingWith<T>(IEnumerable<T> stuff)
{
IEnumerable<CombinedType> converted = stuff.Select(i => (CombinedType) i);
...
}
这失败了
错误 CS0030 无法将类型“T”转换为“CombinedType”
但是,我知道当T 是SomeType1 或SomeType2 时,T 和CombinedType 之间存在隐式转换。我如何告诉编译器这应该是可能的?我不能在泛型方法上添加where T : CombinedType,因为那不是真的。
【问题讨论】:
-
你怎么称呼
DoSomethingWith?你知道你打电话给它的时候是IEnumerable<SomeType1>还是IEnumerable<SomeType2>?
标签: c# generics compiler-errors