C#通用方法返回值
我只是在学习generics并且对方法返回值有疑问。
说,我想要一个generics方法,因为方法签名所需的通用部分只是返回值。 该方法将始终采用一个字符串作为其参数,但可以返回double或int。 这可能吗?
实际上我想要一个字符串,解析其中包含的数字(可以是double或int),然后返回该值。
谢谢。
如果没有返回任何其他类型,则不能从generics方法返回double
或int
。
例如,我可能有一个Foo
类,你的通用解析方法没有任何约束,将允许进行这个调用:
Foo result = Parse("111");
使用数字可以做的最好的事情是只允许使用struct
(value-types)来约束你的函数。
T Parse(string value) where T : struct;
但这将允许所有数字类型,以及任何其他值类型。
您可以通过接口类型进行约束,但是在double
或int
上没有INumeric
接口,因此您会INumeric
。
如果传入了错误的类型,你唯一能做的就是抛出exception – 这通常不是很令人满意。
在这种情况下,您最好的方法是放弃generics并使用单独命名的方法。
double ParseDouble(string value); int ParseInteger(string value);
但是,当然,这不会帮助你学习generics。 抱歉。
像这样的东西?
void Main() { int iIntVal = ConvertTo("10"); double dDoubleVal = ConvertTo("10.42"); } public T ConvertTo(string val) where T: struct { return (T) System.Convert.ChangeType(val, Type.GetTypeCode(typeof(T))); }
是的,这是可能的。
例:
public T ParseValue(String value) { // ... }
你可以做点什么……
public TResult Parse(string parameter) { /* do stuff */ }
并使用它…
int result = Parse("111");
然后它将取决于您在Parse方法中的实现。
希望能帮助到你。