gpt4 book ai didi

c# - 通用抽象字符串转换器

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:47 24 4
gpt4 key购买 nike

我正在尝试将我的基于 Action 和 Func 的转换器转换为类,以便我可以快速地将它们换入和换出,而无需大惊小怪。

接受它们的类显然必须将转换器存储为变量

private Converter converter;

我目前的类定义是:

public abstract class Converter<T>
{
public abstract bool Convert(string str, out T val);
}

public class StringToFooConverter : Converter<Foo>
{
public override bool Convert(string str, out Foo val)
{
//do the parsing here
}
}

但是,我显然不能在不将泛型传递给容纳它的类的情况下创建抽象泛型类 Converter 的变量,我想避免这种情况。

最佳答案

创建一个非泛型接口(interface)并在你的抽象类中实现它

interface IConverter
{
bool Convert(string str, out object val);
}

public abstract class Converter<T> : IConverter
{
public abstract bool Convert(string str, out T val);
bool IConverter.Convert(string str, out object val)
{
T result = default(T);
var success = this.Convert(str, out result);
val = result;
return success;
}
}

public class StringToFooConverter : Converter<Foo>
{
public override bool Convert(string str, out Foo val)
{
//do the parsing here
}
}

如您所见,接口(interface)方法只是调用抽象(通用)方法。因此你现在可以这样写:

object anyOutObject;
IConverter myConverter = new StringToFooConverter();
myConverter.Convert(myString, out anyObject);

然而,由于您没有提供通用类型,因此您必须将 anyObject 转换为您实际的 Foo 类型。

关于c# - 通用抽象字符串转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37854283/

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