4

ハッシュテーブルからブール値を取得しようとしています...私のコードは次のようになります。

Hashtable h = new Hastable();

...

h["foo"] = true;

...

object o = h["foo"];
if( o == null ) { return false; }
if( o.GetType() != typeof(bool) ) { return false; }
return (bool)o;

対照的に、私はオブジェクトにこのようなものを使用します

return h["foo"] as MyObject;

ブール値のより良い解決策はありますか?

4

5 に答える 5

6

ハッシュテーブルを使用する必要がある場合(またはobject他の理由でデータを入力する場合)は、次のことを考慮してください。

object obj = true;
bool b = (obj as bool?) ?? false;
// b -> true

と:

object obj = "hello";
bool b = (obj as bool?) ?? false;
// b -> false

つまり、bool?(または)はターゲットNullable<bool>であることに満足しており( null許容型の有効な値であるため)、結果は(で)に簡単に合体されます。asnull??bool

ハッピーコーディング。

于 2012-05-28T06:02:59.710 に答える
2

ハッシュテーブルは使用しないでください。.NET 2.0がリリースされてから、これらは7年間廃止されています。Dictionary代わりに、のようなジェネリックコレクションを使用してください。

Dictionary<string, bool> myDict = new Dictionary<string, bool>();
myDict["foo"] = true;

bool myBool = myDict["foo"];

ジェネリックは真剣に素晴らしいです。自分に有利に働き、数時間かけてそれらを調べてください。ここからMSDNで始めることができます。私は、このトピックを詳細にカバーしているJonSkeetの本C# inDepthを本当に楽しんでいました。

于 2012-05-28T05:40:55.290 に答える
2

拡張メソッドを使用して、作業をより耐えられるものにすることができます。

public static class IDictionaryExtensions
{
    public static T? GetValue<T>(this IDictionary dictionary, object key) 
                  where T : struct
    {
        if (!dictionary.Contains(key))
            return null;
        object o = dictionary[key];
        if (o == null)
            return null;
        if (!(o is T))
            return null;
        return (T) o;
    }

    public static T GetValue<T>(this IDictionary dictionary, object key,
                                T defaultValue) where T : struct
    {
        return dictionary.GetValue<T>(key) ?? defaultValue;
    }
}

使用:

return h.GetValue("foo", false);

適切な場所で例外をスローするように簡単に適応させたり、欠落している値やタイプの不一致をログに記録したりできます。

于 2012-05-28T06:09:47.687 に答える
1

ジェネリックを使用する必要があります

Dictionary<string, bool> 

(廃止された)ハッシュテーブルの代わりに。

于 2012-05-28T05:45:29.180 に答える
0
bool bVal = false;
object oVal;
if (hash.TryGetValue("foo", out oVal)) {
    bVal = (bool) oVal;
}
于 2016-12-19T02:13:00.927 に答える