【发布时间】:2014-04-08 09:04:52
【问题描述】:
考虑这段代码,我正在测试一个未知变量,它可能是 int、MyObj 或 Tuple,我正在做一些类型检查以查看它是什么,以便我可以继续处理数据取决于它是什么:
class MyObj { }
// ...
void MyMethod(object data) {
if (data is int) Console.Write("Datatype = int");
else if (data is MyObj) Console.Write("Datatype = MyObj");
else if (data is Tuple<object,object>) {
var myTuple = data as Tuple<object,object>;
if (myTuple.Item1 is int && myTuple.Item2 is int) Console.WriteLine("Datatype = Tuple<int,int>");
else if (myTuple.Item1 is int && myTuple.Item2 is MyObj) Console.WriteLine("Datatype = Tuple<int,MyObj>");
// other type checks
}
}
// ...
MyMethod(1); // Works : Datatype = int
MyMethod(new MyObj()); // Works : Datatype = MyObj
MyMethod(Tuple.Create(1, 2)); // Fails
MyMethod(Tuple.Create(1, new MyObj()); // Fails
// and also...
var items = new List<object>() {
1,
new MyObj(),
Tuple.Create(1, 2),
Tuple.Create(1, new MyObj())
};
foreach (var o in items) MyMethod(o);
我的问题是 Tuple<int,MyObj> 不能转换为 Tuple<object,object>,但我可以单独将 int 转换为 object 和 MyObj 转换为 object。
如何进行演员表?
【问题讨论】:
标签: c# generics casting tuples