C# 类从字符串中识别端口
我有一个方法,可以在不同的变量中获取用户的URL,如 foo.bar.com:5678 我需要像这样把港口弄出来C# 类从字符串中识别端口,c#,string,url,C#,String,Url,我有一个方法,可以在不同的变量中获取用户的URL,如 foo.bar.com:5678 我需要像这样把港口弄出来 System.Uri foo = new Uri("foo.bar.com:5678"); int port = foo.Port; 但是它总是返回-1而不是5678来从URI获取端口,这要求URI具有协议 如果您有一个没有协议的简单字符串,您可以预先添加http://或ftp://或其他,但请记住,如果您预先添加了协议,并且如果您的URI没有端口,它将返回该协议的默认端口。请注意
System.Uri foo = new Uri("foo.bar.com:5678");
int port = foo.Port;
但是它总是返回-1而不是5678来从URI获取端口,这要求URI具有协议
如果您有一个没有协议的简单字符串,您可以预先添加http://或ftp://或其他,但请记住,如果您预先添加了协议,并且如果您的URI没有端口,它将返回该协议的默认端口。请注意,port4将协议预先添加到字符串中,或者使用自定义方法将其拆分:
static readonly char[] s_splitter = new char[1] { ':' };
static int GetPort(string s)
{
int port = -1;
if (string.IsNullOrEmpty(s))
return port;
string[] parts = s.Split(s_splitter);
if (parts.Length == 2)
int.TryParse(parts[1], out port);
return port;
}
如果您使用的是.NET Core或NuGet软件包,则可以在不分配任何其他字符串的情况下检索端口:
static int GetPort(string s)
{
int port = -1;
if (string.IsNullOrEmpty(s))
return port;
ReadOnlySpan<char> span = s;
int index = span.IndexOf(':');
if (index == -1 || s.Length < index)
return port;
int.TryParse(span.Slice(index + 1), out port);
return port;
}
这不是Uri类的有效值:-需要指定Uri字符串中应有的协议。
static int GetPort(string s)
{
int port = -1;
if (string.IsNullOrEmpty(s))
return port;
ReadOnlySpan<char> span = s;
int index = span.IndexOf(':');
if (index == -1 || s.Length < index)
return port;
int.TryParse(span.Slice(index + 1), out port);
return port;
}