gpt4 book ai didi

c# - 使用派生类型调用扩展方法重载

转载 作者:可可西里 更新时间:2023-11-01 08:48:31 26 4
gpt4 key购买 nike

简化后,我有这 2 个 Extension 方法:

public static class Extensions
{
public static string GetString(this Exception e)
{
return "Standard!!!";
}
public static string GetString(this TimeoutException e)
{
return "TimeOut!!!";
}
}

这是我使用它们的地方:

try
{
throw new TimeoutException();
}
catch (Exception e)
{
Type t = e.GetType(); //At debugging this a TimeoutException
Console.WriteLine(e.GetString()); //Prints: Standard
}

我有更多的 GetString() 扩展。

我的 try{...}catch{...} 越来越大,基本上我在寻找方法将它缩短到 1 个 catch,它根据异常类型调用扩展.

有没有办法在运行时调用正确的扩展方法?

最佳答案

正如 Yacoub Massad 建议的那样,您可以使用 dynamic,因为使用 dynamic 方法时,重载解析会通过后期绑定(bind)在运行时延迟。

public static class Extensions
{
public static string GetString<T>(this T e) where T : Exception
{
// dynamic method overload resolution is deferred at runtime through late binding.
return GetStringCore((dynamic)e);
}

static string GetStringCore(Exception e)
{
return "Standard!!!";
}

static string GetStringCore(TimeoutException e)
{
return "TimeOut!!!";
}

static string GetStringCore(InvalidOperationException e)
{
return "Invalid!!!";
}
}

这应该可以解决问题。

关于c# - 使用派生类型调用扩展方法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50641508/

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