Max*_*dov 16
像这样的东西?
void Main()
{
int iIntVal = ConvertTo<int>("10");
double dDoubleVal = ConvertTo<double>("10.42");
}
public T ConvertTo<T>(string val) where T: struct
{
return (T) System.Convert.ChangeType(val, Type.GetTypeCode(typeof(T)));
}
Run Code Online (Sandbox Code Playgroud)
Eni*_*ity 10
如果没有返回任何其他类型,则无法返回a double或a int从泛型方法.
例如,我可能有一个Foo类,您的通用解析方法没有任何约束,将允许进行此调用:
Foo result = Parse<Foo>("111");
Run Code Online (Sandbox Code Playgroud)
使用数字可以做的最好的事情是只允许使用struct(值 - 类型)来限制你的功能.
T Parse<T>(string value) where T : struct;
Run Code Online (Sandbox Code Playgroud)
但这将允许所有数字类型,以及任何其他值类型.
您可以通过接口类型限制,但没有一个INumeric对接口double或int使你有种被卡住.
如果传入了错误的类型,你唯一能做的就是抛出异常 - 这通常不是很令人满意.
在这种情况下,您最好的方法是放弃泛型并使用单独命名的方法.
double ParseDouble(string value);
int ParseInteger(string value);
Run Code Online (Sandbox Code Playgroud)
但是,当然,这不会帮助你学习泛型.抱歉.
是的,这是可能的.
public T ParseValue<T>(String value) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41198 次 |
| 最近记录: |