gpt4 book ai didi

c# - 将 short 作为枚举然后转换为字符串有什么意义?

转载 作者:行者123 更新时间:2023-11-30 13:32:23 26 4
gpt4 key购买 nike

我正在查看并试图理解 DnDns项目,这是一个非常令人印象深刻的项目,但是我遇到了一种方法,但我不明白其背后的原因。

public static string GetServByPort(short port, ProtocolType proto)
{
StringBuilder ans = new StringBuilder();

switch (proto)
{
case ProtocolType.Tcp:
{
TcpServices tcps;
tcps = (TcpServices)port;
ans.Append(tcps);
ans.Append("(");
ans.Append(port);
ans.Append(")");
break;
}
case ProtocolType.Udp:
{
UdpServices udps;
udps = (UdpServices)port;
ans.Append(udps);
ans.Append("(");
ans.Append(port);
ans.Append(")");
break;
}
default:
{
ans.Append("(");
ans.Append(port);
ans.Append(")");
break;
}
}
return ans.ToString();
}

TcpServices 和 UdpServices 是枚举。这是 TcpServices:

public enum TcpServices : short
{
/// <summary>
/// Domain Name Server Port
/// </summary>
Domain = 53
}

这是 UdpServices:

public enum UdpServices : short
{
/// <summary>
/// Domain Name Server Protocol Port
/// </summary>
Domain = 53
}

假设端口号是 1。如果协议(protocol)类型是 TCP 或 UDP,输出将是:

1(1)

如果协议(protocol)类型是其他类型,输出是这样的:

(1)

因此,我想为我的项目重写这个方法(仍然完全信任原始开发人员等):

private static string GetServerByPort(short port, ProtocolType protocolType)
{
if (protocolType == ProtocolType.Tcp || protocolType == ProtocolType.Udp)
{
return string.Format("{0}({0})", port);
}

return string.Format("({0})", port);
}

我编写了以下简短的控制台应用程序进行测试:

using System;
using System.Net.Sockets;

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetServByPort(1, ProtocolType.Tcp));
Console.WriteLine(GetServByPort(2, ProtocolType.Udp));
Console.WriteLine(GetServByPort(3, ProtocolType.SpxII));

Console.ReadLine();
}

public static string GetServByPort(short port, ProtocolType proto)
{
switch (proto)
{
case ProtocolType.Tcp:
return string.Format("{0} ({1})", (TcpServices)port, port);
case ProtocolType.Udp:
return string.Format("{0} ({1})", (UdpServices)port, port);
default:
return string.Format("({0})", port);
}
}
}

public enum UdpServices : short
{
Domain = 53
}

public enum TcpServices : short
{
Domain = 53
}
}

这是我的输出:

Screenshot

但是,我不禁认为开发人员出于我没有看到的原因而采用了所有这些复杂性。

我的问题是我是否正确地按照我计划的方式重构此方法,或者原始开发人员这样做的方式是否有充分的理由我没有看到,这会给我带来问题如果我以更简单的方式做事?

最佳答案

在枚举上调用 ToString() 将使用枚举值 name(如果有的话)。 (当没有相应的命名值时,它将给出数字版本。)例如,在您的 TcpServices 情况下,如果值为 53,则结果将是 Domain (53)在原始代码中 - 但在您建议的替换代码中为 53 (53)

虽然在这里使用 StringBuilder 没有意义。我将原始方法重写为:

public static string GetServByPort(short port, ProtocolType proto)
{
switch (proto)
{
case ProtocolType.Tcp:
return string.Format("{0} ({1})", (TcpServices) port, port);
case ProtocolType.Udp:
return string.Format("{0} ({1})", (UdpServices) port, port);
default:
return string.Format("({0})", port);
}
}

关于c# - 将 short 作为枚举然后转换为字符串有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14095552/

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