9

.INI古い構成タイプ ファイルから、署名付きで厳密に型指定された値を返すユーティリティ メソッドがあります。

internal static T GetIniSetting<T>(string config, string key, T defVal = default(T))

コーダーがデフォルト値を指定していない場合に備えて、defaultValue のデフォルト値を (null などではなく) にしたいというstring.Empty点で、文字列を特別なものにしたいと考えています。default(string)

if (cantFindValueInIniFile == true)
{
    if ((typeof(T) == typeof(string)) && (defaultValue == null))
    {
        // *** Code needed here - Cannot convert string to <T>***
        return (T)string.Empty; 
    }
    return defaultValue;
}

asハードキャスティングとキーワードを試しましたが、役に立ちませんでした。

4

3 に答える 3

14

「ハッキー」な方法:

return (T)(object)string.Empty; 

ノート:

  • 前提条件を確認しているので、かなり安全です。
  • 参照型では目立たないパフォーマンスの低下。
于 2012-06-08T04:51:49.553 に答える
7

あなたはこのようにそれをしなければなりません:(T)(object)(string.Empty)

また、マイナーな最適化は、これを静的な読み取り専用文字列フィールドに格納することです。これにより、キャストを実行する必要はなく、ジェネリックパラメーターごとに1回(メソッド呼び出しごとではなく)実行できます。

于 2012-06-08T04:52:21.850 に答える
0

私が間違っていない場合、GetIniSettingの最後のパラメーターはオプションであり、何も指定しない場合にのみdefault(string)を取得します。したがって、string.Emptyをデフォルトの文字列値として使用するには、次のように呼び出します。

string value = GetIniSetting<string>(config, key, string.Empty);
于 2012-06-08T04:54:24.457 に答える