繁体   English   中英

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

[英]How to cast a non-generic delegate to a generic delegate

我想创建一个具有以下签名的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;
}

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

首先,我不确定代码是否实际将值装箱。 如果您将值存储在object变量中,则不会显示该框,而不会这样做。 您只需将其投放两次,就可以在现实中对其进行优化。

其次,不清楚为什么会出现问题

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM