【发布时间】:2016-01-22 06:10:45
【问题描述】:
我知道这很可能是一个涉及泛型的简单问题,或者很可能只是一个很大的“不可以”,但我很想知道我是否可以解决这个问题。
我正在尝试创建一个接收 object 的方法,如果 object 是可枚举类型,则将其传递给可以处理任何可枚举类型的方法,但我被卡住了。
我当前接收对象的方法的代码如下所示:
private void MyMethod()
{
Dictionary<string, object> MyVals = new Dictionary<string,object>();
... fill the MyVals dictionary ...
object x = MyVals["Val_1"];
Type type = x.GetType();
// Check if we have a series of values rather than a single value
if (type != typeof(string) && typeof(IEnumerable).IsAssignableFrom(type))
Test(x);
}
然后,我想我可以写 something 类似以下之一作为我的 Test 方法的方法签名:
1.把它写成一个 IEnumerable 对象:
private void Test(IEnumerable<object> MyEnumeration)
尝试通过以下方式调用它:
Test((IEnumerable<object>)x);
导致无法从IEnumerable<int> 转换为IEnumerable<object> 的运行时错误
2。尝试使用泛型:
private void Test<T>(IEnumerable<T> MyEnumeration)
尝试通过以下方式调用它:
Test(x);
导致签名不正确/无效参数的设计时错误。
或通过:
Test<type>(x);
导致无法找到类型或命名空间type 的设计时错误。
如何做到这一点,或者这只是糟糕的编程习惯,有更好的方法吗?
谢谢!
【问题讨论】:
-
没有理由看签名失败。但是,“两者都不起作用”是对正在发生的事情的可怕解释,这使得这很难解决。当您尝试此操作时,哪些具体不起作用,以及 Test 方法试图完成的一般情况是什么?
-
很公平,@TravisJ。让我更新我的问题...
-
问题随着我的尝试而更新 - 希望这(至少有点)更有意义。