私は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であるとしましょう。プロトコルタイプがTCPまたはUDPの場合の出力は、次のようになります。
1(1)
プロトコルタイプがそれ以外の場合、出力は次のようになります。
(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
}
}
そして、これは私の出力でした:
しかし、私には見えない理由で、開発者はその複雑さのすべてに取り組んだと思わずにはいられません。
私の質問は、私が計画している方法でこのメソッドをリファクタリングする権利があるか、または元の開発者がこれを行った方法に私が見ていなかった正当な理由があるかどうかです。物事はもっと簡単な方法ですか?