首页 / C# / c# – 如何在泛型中使用值类型
c# – 如何在泛型中使用值类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何在泛型中使用值类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1523字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何在泛型中使用值类型](/upload/InfoBanner/zyjiaocheng/777/4de0e0bab0df41b39b1270587a3253fa.jpg)
我有以下代码:
public class Class1
{
void ValueSpecific(string arg)
{
// do string stuff
}
void ValueSpecific(int arg)
{
// do int stuff
}
void ValueSpecific(float arg)
{
// do float stuff
}
void ValueGeneric(string arg)
{
// do stuff
ValueSpecific(arg);
// do more stuff
}
void ValueGeneric(int arg)
{
// do stuff
ValueSpecific(arg);
// do more stuff
}
void ValueGeneric(float arg)
{
// do stuff
ValueSpecific(arg);
// do more stuff
}
void Main(string s, int i, float f)
{
ValueGeneric(s);
ValueGeneric(i);
ValueGeneric(f);
}
}
这有效,但ValueGeneric的所有三个重载的机身都是相同的.我想将它们合并为一种方法,它看起来像:
void ValueGeneric<T>(T arg) where T: string, float, int
{
// do stuff
ValueSpecific(arg);
// do more stuff
}
但是,这当然不是有效的C#.
我能想到的最好的是:
void ValueGeneric(object arg)
{
// Do stuff
if (arg is int)
{
ValueSpecific((int)arg);
}
else if (arg is string)
{
ValueSpecific((string)arg);
}
else if (arg is float)
{
ValueSpecific((float)arg);
}
else
{
Debug.Assert(false, "Invalid type)
}
// Do more stuff
}
但这似乎非常不优雅.我很感激任何建议. (虽然我会对任何解决方案感兴趣,但.NET3.5支持的解决方案最好,因为我正在使用它.)
解决方法:
假设你在所有重载之前和之后都做了相同的事情,你可以应用通常的方法来分解代码中的不同之处并对它们进行参数化.唯一改变的是传入的参数以及您对该参数执行的操作.将它们都传递进去.
static void ValueGeneric<T>(T arg, Action<T> action)
{
// do stuff
action(arg);
// do more stuff
}
然后使用适当的操作调用泛型方法(您的ValueSpecific重载将很好地解决自己).
ValueGeneric(s, ValueSpecific);
ValueGeneric(i, ValueSpecific);
ValueGeneric(f, ValueSpecific);
内容总结
以上是互联网集市为您收集整理的c# – 如何在泛型中使用值类型全部内容,希望文章能够帮你解决c# – 如何在泛型中使用值类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。