如何将非泛型委托转换为泛型委托

时间:2018-10-09 17:57:45

标签: c# generics delegates

我想创建一个具有以下签名的ValueGetter实例:

public delegate void ValueGetter<TValue>(ref TValue value);

如果TValue的类型不是int,则实例应引发异常,否则将value设置为myInt

我能想到的最好的方法是:

public void GetVal<TValue>(ref TValue val)
{
    if (typeof(TValue) != typeof(int))
        throw new NotSupportedException();
    val = (TValue)(object)myInt;
}

但是,这并不理想,因为它涉及拳击。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

首先,我不确定代码实际上是否将值括起来。仅当您将值存储在object变量中时才显示该框,而不会这样做。您只需将其投放两次,就可以在现实中对其进行优化。

第二,目前尚不清楚为什么这将是一个问题

第三,抛出异常似乎很奇怪。在什么情况下会使用int以外的东西?在这些情况下,例外是适当的应对措施吗?