Mac*_*ver 150 .net c# generics return-type
有没有办法使这个方法通用,所以我可以返回一个字符串,bool,int或double?现在,它返回一个字符串,但如果它能够找到"true"或"false"作为配置值,我想返回一个bool例如.
    public static string ConfigSetting(string settingName)
    {  
         return ConfigurationManager.AppSettings[settingName];
    }
Jon*_*eet 323
你需要使它成为通用方法,如下所示:
public static T ConfigSetting<T>(string settingName)
{  
    return /* code to convert the setting to T... */
}
但调用者必须指定他们期望的类型.然后Convert.ChangeType,您可以使用,假设支持所有相关类型:
public static T ConfigSetting<T>(string settingName)
{  
    object value = ConfigurationManager.AppSettings[settingName];
    return (T) Convert.ChangeType(value, typeof(T));
}
我并不完全相信这一切都是个好主意,请注意......
Bro*_*ass 28
你可以使用Convert.ChangeType():
public static T ConfigSetting<T>(string settingName)
{
    return (T)Convert.ChangeType(ConfigurationManager.AppSettings[settingName], typeof(T));
}
Rol*_*sta 10
有很多方法可以做到这一点(按优先级列出,具体针对OP的问题)
选项1:直接方法 - 为您期望的每种类型创建多个函数,而不是具有一个通用函数.
public static bool ConfigSettingInt(string settingName)
{  
     return Convert.ToBoolean(ConfigurationManager.AppSettings[settingName]);
}
选项2:当您不想使用花哨的转换方法时 - 将值转换为object,然后转换为泛型类型.
public static T ConfigSetting<T>(string settingName)
{  
     return (T)(object)ConfigurationManager.AppSettings[settingName];
}
注意 -如果演员表无效(您的情况),这将抛出错误.如果您不确定类型转换,我不建议这样做,而是选择选项3.
选项3:具有类型安全性的通用 - 创建一个通用函数来处理类型转换.
public static T ConvertValue<T,U>(U value) where U : IConvertible
{
    return (T)Convert.ChangeType(value, typeof(T));
} 
注 - T是期望的类型,注意这里的where约束(U的类型必须是IConvertible以保存我们的错误)
小智 6
您必须将方法返回值的类型转换为在调用期间传递给方法的Generic类型.
    public static T values<T>()
    {
        Random random = new Random();
        int number = random.Next(1, 4);
        return (T)Convert.ChangeType(number, typeof(T));
    }
您需要为通过该方法返回的值传递类型为casteable的类型.
如果您希望返回一个不是类型的类型的值,您可能必须更改代码或确保传递一个类型,该类型对于方法的返回值是类型的.所以,这种方法并没有被推荐.
小智 5
创建一个函数并传递泛型类型的输出参数。
 public static T some_function<T>(T output_object /*declare as Output object*/)
    {
        return output_object;
    }
| 归档时间: | 
 | 
| 查看次数: | 228760 次 | 
| 最近记录: |