是否可以编写类似的结构?
我想以某种方式设置类型为T的参数的默认值。
private T GetNumericVal<T>(string sColName, T defVal = 0)
{
string sVal = GetStrVal(sColName);
T nRes;
if (!T.TryParse(sVal, out nRes))
return defVal;
return nRes;
}
此外,我发现以下链接:
Generic type conversion FROM string
我认为,此代码必须正常工作
private T GetNumericVal<T>(string sColName, T defVal = default(T)) where T : IConvertible
{
string sVal = GetStrVal(sColName);
try
{
return (T)Convert.ChangeType(sVal, typeof(T));
}
catch (FormatException)
{
return defVal;
}
}
答案 0 :(得分:15)
我没有尝试过此操作,只是将T defVal = 0
更改为T defVal = default(T)
答案 1 :(得分:4)
如果您知道T将具有无参数构造函数,则可以使用新的T():
private T GetNumericVal<T>(string sColName, T defVal = new T()) where T : new()
否则您可以使用默认(T)
private T GetNumericVal<T>(string sColName, T defVal = default(T))
答案 2 :(得分:4)
回答可用于设置默认值的问题
private T GetNumericVal<T>(string sColName, T defVal = default(T))
{
string sVal = GetStrVal(sColName);
T nRes;
if (!T.TryParse(sVal, out nRes))
return defVal;
return nRes;
}
但是你不能调用静态的TryParse方法,因为编译器无法知道类型T声明这个静态方法。