C# 具有默认值的泛型解析

C# 具有默认值的泛型解析,c#,.net,generics,C#,.net,Generics,我正在尝试创建一个通用解析方法,但我被卡住了。 我希望能够接受两种类型,类型1的对象和类型2的默认值。 然后我想尝试将type1对象解析为type2对象,如果这不起作用,那么返回默认值 显然,下面的代码是无效的,不能工作。但这正是我想要的。 有人知道如何在C#中实现这一点吗 公共静态K TryGenericParse(T objectToParse,K defaultValue) { K返回值; if(!K.TryParse(objectToParse,out returnValue)) ret

我正在尝试创建一个通用解析方法,但我被卡住了。
我希望能够接受两种类型,类型1的对象和类型2的默认值。
然后我想尝试将type1对象解析为type2对象,如果这不起作用,那么返回默认值

显然,下面的代码是无效的,不能工作。但这正是我想要的。 有人知道如何在C#中实现这一点吗

公共静态K TryGenericParse(T objectToParse,K defaultValue)
{
K返回值;
if(!K.TryParse(objectToParse,out returnValue))
returnValue=defaultValue;
返回值;
}

为此,您可以使用TypeConverter。您可以使用TypeDescriptor的静态方法GetConverter检索类型转换

public static TOuput TryGenericParse<TInput, TOuput>(TInput input)
{
    var converter = TypeDescriptor.GetConverter(typeof(TOuput));
    if (!converter.CanConvertFrom(typeof (TInput)))
        return default(TOuput);
    return (TOuput)converter.ConvertFrom(input);
}

bool bl = TryGenericParse<string, bool>("True");
double dbl = TryGenericParse<string, double>("3.222");
publicstatictoput-TryGenericParse(TInput输入)
{
var converter=TypeDescriptor.GetConverter(typeof(TOuput));
if(!converter.CanConvertFrom(typeof(TInput)))
返回默认值(TOuput);
返回(toput)转换器。ConvertFrom(输入);
}
bool bl=TryGenericParse(“真”);
双dbl=TryGenericParse(“3.222”);

我认为使用泛型无法做到这一点。Int32、DateTime等上的TryParse函数是完全不同的函数,只是碰巧具有相同的名称。也许你可以用反射做点什么。@MatthijsWessels是的,我知道试着解析在泛型上是不可能的。我只是想知道是否有人实现了类似的东西。如果它存在,我的生活会更轻松。我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。@JohnSaunders我看不到这个问题的实际答案。加上这个“共识”是有偏见的,因为它针对的是那些实际使用Meta的人,而不是一个简单的随机抽样的整体人口。对不起,你指的是哪个问题?而且,这个共识显然是那些对网站足够关心并愿意讨论这个问题的人的共识。不是每个人都参与共识的事实并不意味着共识就不那么重要。它就像一种魅力!谢谢!:)
public static TOuput TryGenericParse<TInput, TOuput>(TInput input)
{
    var converter = TypeDescriptor.GetConverter(typeof(TOuput));
    if (!converter.CanConvertFrom(typeof (TInput)))
        return default(TOuput);
    return (TOuput)converter.ConvertFrom(input);
}

bool bl = TryGenericParse<string, bool>("True");
double dbl = TryGenericParse<string, double>("3.222");