gpt4 book ai didi

c# - 交付静态哈希表的最佳方式 c#

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

我有以下例子:

public enum HttpRequestHeader
{
Accept,
AcceptCharset
}

public static class HTTP
{
public static Hashtable HttpRequestHeaderString
{
get
{
Hashtable returnHashtable = new Hashtable();
returnHashtable.Add(HttpRequestHeader.Accept,"Accept");
returnHashtable.Add(HttpRequestHeader.AcceptCharset,"Accept-Charset");
return returnHashtable;
}
}
}

我将访问:

string HttpRequestHeaderString
= HTTP.HttpRequestHeaderStrings[HttpRequestHeader.Accept]

很多次。由于这是一个static HashTable,是否有更好的方法可以更有效地提供相同的功能?

我知道我可以使用不同类型的集合来实现这个特定的解决方案,但是如果我想使用 HashTable - 我有哪些选择?

非常感谢!

最佳答案

你想让调用者能够改变字典吗?如果是这样,拥有一个静态的听起来像是一个非常奇怪的想法。如果没有,您实际上只需要能够响应对 Accept 和 AcceptCharset 的请求,我可能会在一个简单的 switch 语句中执行此操作。

您说您真的想使用哈希表 - 为什么?这里的大局是什么?

静态公开可变数据结构几乎总是一个坏主意。如果您想要帮助程序构建具有一些初始值的哈希表,那么我会将其设为方法而不是属性。如果您不需要突变,我会编写一个方法来获取特定 HttpRequestHeader 的值,而不是公开一个集合。例如:

public static class HTTP
{
public static string GetHeaderString(HttpRequestHeader header)
{
// Use a dictionary here if you want. The API is the important bit

switch (header)
{
case HttpRequestHeader.Accept: return "Accept";
case HttpRequestHeader.AcceptCharset: return "Accept-Charset";
default: throw new KeyNotFoundException(header.ToString());
}
}
}

另一种选择是使用类似 Java 的 header 枚举:

public sealed class RequestHeader
{
public static RequestHeader Accept = new RequestHeader("Accept");
public static RequestHeader AcceptCharset =
new RequestHeader("Accept-Charset");

private readonly string name;

private RequestHeader(string header)
{
this. name = name;
}

public string Name
{
get { return name; }
}
}

您需要针对 null 进行检查,但那将是您可以获得的 RequestHeader 的唯一无效值。 (枚举不进行范围检查,因此有人可以轻松地在您当前的代码中编写 ((HttpRequestHeader)-1) ...换句话说,它无论如何都不会修复参数验证。)

编辑:作为对评论的回应,如果您使用的是 C# 3 并且想要急切初始化(让生活更轻松),您可以这样写:

public static class HTTP
{
private static readonly Dictionary<HttpRequestHeader, string> Headers =
new Dictionary<HttpRequestHeader, string>
{
( HttpRequestHeader.Accept, "Accept" ),
( HttpRequestHeader.AcceptCharset, "Accept-Charset" )
};

public static string GetHeaderString(HttpRequestHeader header)
{
return Headers[header];
}
}

关于c# - 交付静态哈希表的最佳方式 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986482/

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