gpt4 book ai didi

c# - 你能返回一个基于泛型类型的函数吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:42 26 4
gpt4 key购买 nike

我正在编写一个简单的概念证明,本质上应该是一个解析器生成器。

基本上我正在寻找一种方法来编写一个函数,该函数将返回一个从字符串转换为给定类型的某个对象的函数 - 我希望能够在本质上执行以下操作:

Func<string, double> ConvertToDouble = BuildConverter(typeof(0.0));

显然这是一个非常人为的例子 - 但如果我能做简单的版本,那么我应该能够做更复杂的版本!

FWIW,我最终想做的是将一串值映射到一个类上,但为了使其尽可能灵活,我想通过一个函数来实现,该函数将返回一个执行以下操作的函数转换。在功能方面,我想我想要这样的东西:

a -> (string -> a)

作为第一次尝试,我试过这样做:

public static Func<string, T> BuildParser<T>(T t)
{
if (t is String)
return new Func<string, T>(x => x.ToString());
if (t is double)
return new Func<string, T>(x => double.Parse(x));
}

这根本不起作用,但它让我对我应该采取什么方法感到有点困惑 - 所以任何帮助都将不胜感激!

最佳答案

您不能将 classstruct 类型混合使用。除此之外,它将起作用。

请看下面的代码:

private void Testing() {
var func = BuildParserStruct<double>();
double value = func("5");
}

public static Func<string, T> BuildParserClass<T>() where T : class
{
return x => x as T;
}

public static Func<string, T> BuildParserStruct<T>() where T : struct
{
return (x => (T)Convert.ChangeType(x, typeof(double)));
}

关于c# - 你能返回一个基于泛型类型的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4452796/

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