gpt4 book ai didi

.net - 泛型方法的返回类型

转载 作者:行者123 更新时间:2023-12-04 01:47:54 26 4
gpt4 key购买 nike

我有一个泛型方法,它返回泛型类型的对象。一些代码:

public static T Foo<T>(string value)
{
if (typeof(T) == typeof(String))
return value;

if (typeof(T) == typeof(int))
return Int32.Parse(value);

// Do more stuff
}

我可以看到编译器可能会提示这个(“无法将类型 'String' 转换为 'T'”),即使代码不应该在运行时导致任何逻辑错误。有什么方法可以实现我想要的吗?类型转换没有帮助...

最佳答案

好吧,你可以这样做:

public static T Foo<T>(string value)
{
if (typeof(T) == typeof(String))
return (T) (object) value;

if (typeof(T) == typeof(int))
return (T) (object) Int32.Parse(value);

...
}

这将涉及值类型的装箱,但它会起作用。

您确定这最好作为单一方法完成,而不是(比如说)可以由不同转换器实现的通用接口(interface)?

或者,您可能想要 Dictionary<Type, Delegate>像这样:
Dictionary<Type, Delegate> converters = new Dictionary<Type, Delegate>
{
{ typeof(string), new Func<string, string>(x => x) }
{ typeof(int), new Func<string, int>(x => int.Parse(x)) },
}

那么你会像这样使用它:
public static T Foo<T>(string value)
{
Delegate converter;
if (converters.TryGetValue(typeof(T), out converter))
{
// We know the delegate will really be of the right type
var strongConverter = (Func<string, T>) converter;
return strongConverter(value);
}
// Oops... no such converter. Throw exception or whatever
}

关于.net - 泛型方法的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com