c# - 返回类型的泛型参数并执行操作
问题描述
是否可以在 C# 中对一般传递的参数执行操作?我创建了这个最小的示例来演示一个潜在的用例。
private T genericFormatterTest<T>(T x)
{
if (Type.Equals(x, typeof(int)))
{
return (int)x * (int)x; //squared
} else if (Type.Equals(x, typeof(string)))
{
return x.ToString()+"\n";
}
throw new InvalidCastException(); //or another suitable exception
}
...
int squared = genericFormatterTest<int>(5);
string newline = genericFormatterTest<string>("hello");
解决方案
所以..以下代码有效并且是“通用的”
private T genericFormatterTest<T>(T x)
{
if (typeof(T) == typeof(int))
{
return (T)(object)((int)(object)x * (int)(object)x); //squared
}
else
{
return (T)(object)(x + "\n");
}
}
但这真的是你想要的吗?
此问答中使用的样本
使用相同的示例,您还可以对 T 引入约束,但它只是略微(并且可以说)减少了它的读取程度:
private T genericFormatterTest<T>(T x) where T: IConvertible
{
if (typeof(T) == typeof(int))
{
return (T)(object)(Convert.ToInt32(x) * Convert.ToInt32(x)); //squared
}
else
{
return (T)(object)(x + "\n");
}
}
推荐阅读
- matlab - 在matlab中绘制单自由度图的自由振动响应
- dart - 细绳?在将 url 转换为 youtube API 的 ID 时,无法指定在颤振中键入字符串
- php - 将第一行数据回显到页面标题中
- laravel - laravel simplexml 加载文件数据库凝乳
- javascript - TypeError:无法读取未定义的属性(读取“公会”)
- string - String SwiftUI 2.0 中两个特殊字符之间的粗体 | NS正则表达式
- wordpress - 如何在 Woocommerce 产品类别页面中显示 ACF 中继器
- android - resolveAttribute 有时会返回 -1
- reactjs - 使用 react-hook-form 和多个表单组件进行 React 表单验证
- node.js - Coinbase api - 确认交易的通知